美文网首页
通过控制台部署智能合约

通过控制台部署智能合约

作者: dustOfHighbury | 来源:发表于2017-07-10 23:21 被阅读4905次

    除了使用图形界面的以太坊钱包之外,用户还可以通过Web.js Javascript API在控制台命令行上部署和调用智能合约。

    首先需要安装go-ethereum客户端,这里就不再赘述了。下面介绍一下我在mac电脑上部署和调用智能合约的步骤。

    1)首先打开一个命令行窗口(称之为Terminal 1,因为后面需要再建一个窗口),运行命令 geth --testnet 打开测试网络,如图:

    打开测试网络

    2) 然后打开另一个命令行窗口(Terminal 2),执行 geth attach 命令打开Javascript控制台,通过这个控制台可使用web3的方法和geth自身的管理API调用部署的智能合约。但请注意,我们需要打开但是测试网络的控制台,所以要为 geth attach 命令指明访问的位置,如图:

    打开测试网络的JS控制台

    3)在Terminal 2中执行 personal.listAccounts 查询已有账户,发现并没有账户,所以就自己创建一个,执行 personal.newAccount('随便写一个私钥') , 如图:

    创建账户

    4) 在Terminal 2中用 web3.eth.getBalance() 查询刚才创建的账户(addr1)中的余额,发现为0,于是启动挖矿 miner.start() ,如图:

    启动挖矿

    5)与此同时,在Terminal 1中,以太坊节点会生成挖矿必需的数据,你会看到Generating DAG的进度,完成之后挖矿就会开始,可以看到小锤子图标:

    开始挖矿

    6)片刻之后再在Terminal 2中查询余额,发现一串天文数字,单位是wei,1 wei等于10^-18 ether。然后就可以停止挖矿了。

    停止挖矿

    7)写一段简单的智能合约代码,比如下面这段给商品打分的智能合约:

    contract Rating {

    function setRating (bytes32 _key, uint256 _value) {

    /* 为特定编号的商品打分 */

    ratings[_key] = _value;

    }

    /* 显示特定商品的分数 */

    mapping (bytes32 => uint256) public ratings;

    }

    把这段代码放到Solidity语言的在线编译器进行编译(也可以用solc编译,这里暂时只介绍在线编译器编译)。

    Solidity在线编译器

    8)将Web3 deploy菜单(上图红圈)下的全部内容复制到Terminal 2的控制台(可能需要打开账户,即unlockAccount,输入私钥),并开启挖矿,经过一段时间的确认,控制台提示"Contract mined!",则合约创建成功,并返回合约地址和此次交易的散列值。

    合约创建成功

    9)在控制台窗口,可以使用合约名和函数名调用合约。假设你想给1号商品打3分,则可以调用该合约名(见Web3 deploy菜单下的内容)的setRating函数,且需要用到合约对象的sendTransaction()方法来发起交易。并且可以使用rating合约重点ratings数组来显示1号商品的打分。

    调用合约

    至此,一个简单的智能合约的部署和调用就完成了。以上。

    相关文章

      网友评论

          本文标题:通过控制台部署智能合约

          本文链接:https://www.haomeiwen.com/subject/sxijhxtx.html