Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 65.8MB ·虚拟内存 1300.5MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
接口本意是物体之间连接的部位。例如:电脑的 usb 接口可以用来连接鼠标也可以连接U盘和硬盘。因此,使用标准的接口可以极大的拓展程序的功能。在 solidity 语言中,接口可以用来接受相同规则的合约,实现可更新的智能合约。
interface 类似于抽象合约,但它们不能实现任何功能。还有其他限制:
接口需要有interface关键字,并且内部只需要有函数的声明,不用实现。
只要某合约中有和词接口相同的函数声明,就可以被此合约所接受。
interface 接口名{ 函数声明; }
例子:
interface animalEat{ function eat() public returns(string); }
在下面的例子中,定义了cat合约以及dog合约。他们都有eat方法.以此他们都可以被上面的animalEat接口所接收。
contract cat{ string name; function eat() public returns(string){ return "cat eat fish"; } function sleep() public returns(string){ return "sleep"; } } contract dog{ string name; function eat() public returns(string){ return "dog miss you"; } function swim() public returns(string){ return "sleep"; } } interface animalEat{ function eat() public returns(string); } contract animal{ function test(address _addr) returns(string){ animalEat generalEat = animalEat(_addr); return generalEat.eat(); } }
在合约 animal 中,调用函数 test,如果传递的是部署的 cat 的合约地址,那么我们在调用接口的 eat 方法时,实则调用了cat 合约的 eat 方法。 同理,如果传递的是部署的 dog 的合约地址,那么我们在调用接口的 eat 方法时,实则调用了 dog 合约的 eat 方法。
interface UniswapV2Factory { function getPair(address tokenA, address tokenB) external view returns (address pair); } interface UniswapV2Pair { function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); } contract UniswapExample { address private factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; address private dai = 0x6B175474E89094C44Da98b954EedeAC495271d0F; address private weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; function getTokenReserves() external view returns (uint, uint) { address pair = UniswapV2Factory(factory).getPair(dai, weth); (uint reserve0, uint reserve1, ) = UniswapV2Pair(pair).getReserves(); return (reserve0, reserve1); } }
在以太坊区块链上,Gas被用来补偿矿工为智能合约的存储与执行所提供的算力。目前以太坊的利用在逐渐增长,而交易手续费成本也水涨传告 —— 现在每天的gas成本已经高达数百 ...