编译faucet合约

现在我们已经有了我们的第一个示例合约,我们需要使用Solidity编译器将Solidity代码转换为EVM字节代码,以便它可以由EVM执行。

Solidity编译器是独立的可执行文件,作为不同框架的一部分,也捆绑在一个_Integrated Development Environment(IDE)_中。为了简单起见,我们将使用一种更流行的IDE,称为Remix。

使用你的Chrome浏览器(使用我们之前安装的MetaMask钱包)导航到以下位置的Remix IDE:

https://remix.ethereum.org/

当你第一次加载Remix时,它将以一个名为 ballot.sol 的示例合约开始。我们不需要这个,所以让我们关闭它,点击标签边的 x :

Close the default example tab

Figure 10. Close the default example tab

现在,点击左侧工具栏中的圆形加号,添加一个新选项卡,命名新文件 Faucet.sol:

Click the plus sign to open a new tab

Figure 11. Click the plus sign to open a new tab

打开新选项卡后,复制并粘贴示例 Faucet.sol:

Copy the Faucet example code into the new tab

Figure 12. Copy the Faucet example code into the new tab

现在我们已将 Faucet.sol 合约加载到Remix IDE中,IDE将自动编译代码。如果一切顺利,你会看到一个绿色的放开,右边出现一个带有“faucet”的绿色方块,在Compile选项卡下,确认编译成功:

编译faucet合约 - 图4

Figure 13. Remix successfully compiles the Faucet.sol contract

如果出现问题,最可能的问题是Remix IDE正在使用与+0.4.19+版本不同的Solidity编译器。在这种情况下,我们的编译指示将阻止+Faucet.sol+编译。要更改编译器版本,请转到“Settings”选项卡,并重试。

Solidity编译器现在已将我们的+ Faucet.sol +编译为EVM字节码。如果你好奇,字节码如下所示:

  1. PUSH1 0x60 PUSH1 0x40 MSTORE CALLVALUE ISZERO PUSH2 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0xE5 DUP1 PUSH2 0x1D PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x60 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x2E1A7D4D EQ PUSH1 0x41 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE ISZERO PUSH1 0x4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x5F PUSH1 0x4 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP2 SWAP1 POP POP PUSH1 0x61 JUMP JUMPDEST STOP JUMPDEST PUSH8 0x16345785D8A0000 DUP2 GT ISZERO ISZERO ISZERO PUSH1 0x77 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO ISZERO PUSH1 0xB6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 PUSH9 0x13D1EA839A4438EF75 GASLIMIT CALLVALUE LOG4 0x5f PUSH24 0x7541F409787592C988A079407FB28B4AD000290000000000

你是不是很高兴使用像Solidity这样的高级语言,而不是直接在EVM字节码中编程?我也是!