以太坊开发 | 如何部署和调用智能合约

秒速五厘米 2022-03-31 07:23 498阅读 0赞

#

这篇写于搭建好私链之后、第一次尝试部署智能合约。用到了三种部署方法:(1)网页版Remix,(2)网页版Remix+MetaMask,(2)网页版Remix+geth客户端。

操作系统:macOS Mojave 10.14

Remix是Solidity官方推荐的编译器,有网页版和本地编译版(安装方法)。

教程1:适合新手部署简单合约

利用Remix网页版编译器和MetaMask(浏览器版Etherreum钱包)部署智能合约至测试网络-原文链接

教程中给出了两种方法。如下。

  1. 利用Remix的在线编译器编译并在本地部署一个简单的智能合约。由于文中的示例代码没有断行,所以可以copy下面这段我整理的有断行的。

    pragma solidity >=0.4.0 <0.6.0;

    contract My_Token {

    1. /* This creates an array with all balances */
    2. mapping (address => uint256) public balanceOf;
    3. /* Initializes contract with initial supply tokens to the creator of the contract */
    4. function MyToken(uint256 initialSupply) public {
    5. balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens
    6. }
    7. /* Send coins */
    8. function transfer(address _to, uint256 _value) public {
    9. require(balanceOf[msg.sender] >= _value); // Check if the sender has enough
    10. require(balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows
    11. balanceOf[msg.sender] -= _value; // Subtract from the sender
    12. balanceOf[_to] += _value; // Add the same to the recipient
    13. }

    }

  2. Remix + MetaMask 在以太坊测试网络中部署智能合约。具体方法见教程。

教程2:利用geth客户端搭建私链并部署合约

1. 调试智能合约并编译

用网页版Remix在私链中调试智能合约,调试完成后,点击红框中的“Details”获取编译后的json字符串。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbW1lbF85Mg_size_16_color_FFFFFF_t_70

出现如下界面,选中粗红笔画出的json字符串并复制粘贴到文本编辑器中:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbW1lbF85Mg_size_16_color_FFFFFF_t_70 1

2. 将编译后的合约粘贴到终端

打开终端,启动geth客户端(且保证私链中账户有钱),然后输入“abi=刚刚复制的json字符串”:

  1. > abi=[{"constant":false,"inputs":[],"name":"pledge","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"cloud","outputs":[{"name":"total_pledge","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
  2. [{
  3. constant: false,
  4. inputs: [],
  5. name: "pledge",
  6. outputs: [],
  7. payable: true,
  8. stateMutability: "payable",
  9. type: "function"
  10. }, {
  11. constant: true,
  12. inputs: [{
  13. name: "",
  14. type: "address"
  15. }],
  16. name: "cloud",
  17. outputs: [{
  18. name: "total_pledge",
  19. type: "uint256"
  20. }],
  21. payable: false,
  22. stateMutability: "view",
  23. type: "function"
  24. }]

3. 创建合约:

  1. > multiplyContract=eth.contract(abi)
  2. {
  3. abi: [{
  4. constant: false,
  5. inputs: [],
  6. name: "pledge",
  7. outputs: [],
  8. payable: true,
  9. stateMutability: "payable",
  10. type: "function"
  11. }, {
  12. constant: true,
  13. inputs: [{...}],
  14. name: "cloud",
  15. outputs: [{...}],
  16. payable: false,
  17. stateMutability: "view",
  18. type: "function"
  19. }],
  20. ...

4. 解锁要调用合约的账户

  1. > personal.unlockAccount(eth.accounts[0])
  2. Unlock account 0x65d86e70d7f4bc3b0c7c47e4d24d18c24ae1dd8c

再将上面这个json串按照教程中的方法拷贝到终端中。

教程3:如何调用智能合约中的某个function

点击链接查看原文。

另:

以上教程都是给了现成的智能合约,教你怎么把它部署到区块链里,而没有提及智能合约的写法。关于智能合约怎么写,用得最多的语言是Solidity。可以参考官方英文教程和翻译版本教程。或我的下一篇博文[链接]

发表评论

表情:
评论列表 (有 0 条评论,498人围观)

还没有评论,来说两句吧...

相关阅读

    相关 智能合约 简介

    以太坊是一个分布式的计算平台。它会生成一个名为Ether的加密货币。程序员可以在以太坊区块链上写下“智能合约”,这些以太坊智能合约会根据代码自动执行。 以太坊是什么?

    相关 智能合约是什么?

    以太坊是最早提出做智能合约的平台。由于以太坊区块链被普遍接受,因此多数区块链的智能合约采取与以太坊相似的设计。本文将详细介绍以太坊的智能合约:它是什么?它有什么用? 以太...