如上所述,数组 getter 仅从给定键返回单个值。我们的 UI 需要更新所有宠物的收养状态,但是进行 16 次 API 调用并不理想。所以我们的下一步是编写一个函数来返回整个数组。
在我们上面添加的功能之后,将以下getAdopters()
功能添加到智能合约中adopt()
:
// Retrieving the adoptersfunction getAdopters() public view returns (address[16] memory) { return adopters;}
注意事项:
由于adopters
已经声明,我们可以简单地返回它。请务必将返回类型(在本例中为 的类型adopters
)指定为address[16] memory
。memory
给出变量的数据位置.
函数声明中的view
关键字表示该函数不会修改合约的状态。有关视图施加的确切限制的更多信息,请参见此处。
现在我们已经编写了智能合约,接下来的步骤是编译和迁移它。
Solidity 是一种编译语言,这意味着我们需要将 Solidity 编译为字节码,以供以太坊虚拟机 (EVM) 执行。将其视为将我们人类可读的 Solidity 转换为 EVM 可以理解的东西。
在终端中,确保您位于包含 dapp 的目录的根目录中,然后键入:
truffle compile
注意:如果您在 Windows 上运行此命令时遇到问题,请参阅解决 Windows 上的命名冲突的文档。
您应该会看到类似于以下内容的输出:
Compiling your contracts...===========================> Compiling ./contracts/Adoption.sol> Compiling ./contracts/Migrations.sol> Artifacts written to /Users/cruzmolina/Code/truffle-projects/metacoin/build/contracts> Compiled successfully using:
- solc: 0.5.0+commit.1d4f565a.Emscripten.clang
现在我们已经成功编译了我们的合约,是时候将它们迁移到区块链了!
迁移是一个部署脚本,旨在更改应用程序合约的状态,将其从一种状态移动到另一种状态。对于第一次迁移,您可能只是部署新代码,但随着时间的推移,其他迁移可能会移动数据或用新的合同替换合同。
注意:阅读Truffle 文档中有关迁移的更多信息。
您会在migrations/
目录中看到一个 JavaScript 文件:1_initial_migration.js
. 这处理部署Migrations.sol
合约以观察后续智能合约迁移,并确保我们将来不会重复迁移未更改的合约。
现在我们准备创建自己的迁移脚本。
2_deploy_contracts.js
在目录中创建一个名为的新文件migrations/
。
将以下内容添加到2_deploy_contracts.js
文件中:
var Adoption = artifacts.require("Adoption");module.exports = function(deployer) {
deployer.deploy(Adoption);};
在我们将合约迁移到区块链之前,我们需要运行一个区块链。在本教程中,我们将使用Ganache,这是一个用于以太坊开发的个人区块链,您可以使用它来部署合约、开发应用程序和运行测试。如果您还没有,请下载 Ganache并双击图标以启动应用程序。这将生成一个在 7545 端口本地运行的区块链。
注意:在Ganache 文档中阅读有关 Ganache 的更多信息。
回到我们的终端,将合约迁移到区块链。
truffle migrate
您应该会看到类似于以下内容的输出:
1_initial_migration.js======================
Deploying 'Migrations'
----------------------
> transaction hash: 0x3b558e9cdf1231d8ffb3445cb2f9fb01de9d0363e0b97a17f9517da318c2e5af
> Blocks: 0 Seconds: 0
> contract address: 0x5ccb4dc04600cffA8a67197d5b644ae71856aEE4
> account: 0x8d9606F90B6CA5D856A9f0867a82a645e2DfFf37
> balance: 99.99430184
> gas used: 284908
> gas price: 20 gwei
> value sent: 0 ETH
> total cost: 0.00569816 ETH
> Saving migration to chain.
> Saving artifacts
-------------------------------------
> Total cost: 0.00569816 ETH2_deploy_contracts.js=====================
Deploying 'Adoption'
.............................
.............................
您可以看到按顺序执行的迁移,然后是与每个迁移相关的一些信息。(您的信息会有所不同。)
在 Ganache 中,请注意区块链的状态已更改。区块链现在显示,以前的当前块0
是现在4
。此外,虽然第一个账户最初有 100 个以太币,但由于迁移的交易成本,现在它更低了。稍后我们将更多地讨论交易成本。
您现在已经编写了您的第一个智能合约并将其部署到本地运行的区块链。现在是时候与我们的智能合约进行交互了,以确保它符合我们的要求。
Prev Chapter:手把手教你开发dapp (1)
Next Chapter:手把手教你开发dapp (3)