除了使用图形界面的以太坊钱包之外,用户还可以通过Web.js Javascript API在控制台命令行上部署和调用智能合约。
首先需要安装go-ethereum客户端,这里就不再赘述了。下面介绍一下我在mac电脑上部署和调用智能合约的步骤。
1)首先打开一个命令行窗口(称之为Terminal 1,因为后面需要再建一个窗口),运行命令 geth --testnet 打开测试网络,如图:
2) 然后打开另一个命令行窗口(Terminal 2),执行 geth attach 命令打开Javascript控制台,通过这个控制台可使用web3的方法和geth自身的管理API调用部署的智能合约。但请注意,我们需要打开但是测试网络的控制台,所以要为 geth attach 命令指明访问的位置,如图:
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编译,这里暂时只介绍在线编译器编译)。
8)将Web3 deploy菜单(上图红圈)下的全部内容复制到Terminal 2的控制台(可能需要打开账户,即unlockAccount,输入私钥),并开启挖矿,经过一段时间的确认,控制台提示"Contract mined!",则合约创建成功,并返回合约地址和此次交易的散列值。
9)在控制台窗口,可以使用合约名和函数名调用合约。假设你想给1号商品打3分,则可以调用该合约名(见Web3 deploy菜单下的内容)的setRating函数,且需要用到合约对象的sendTransaction()方法来发起交易。并且可以使用rating合约重点ratings数组来显示1号商品的打分。
至此,一个简单的智能合约的部署和调用就完成了。以上。