Browser-solidity是在浏览器开发智能合约,在浏览器中直接开发、调试和编译。可以快速上手,不需要安装,非常方便。Browser-solidity地址:https://ethereum.github.io/browser-solidity
1.在Browser-solidity的左侧输入:
以下代码的功能是两个相加。
pragma solidity ^0.4.21;
contract Demo{
function add (uint a , uint b) public pure returns (uint sum) {
uint result=a+b;
return result;
}
}
2.Compile
点击“Start to compile”进行代码编译,如下图所示:
![](https://img.haomeiwen.com/i5942767/2c4277243a7adf2c.png)
点击“Details”按钮会弹出一个框,里面有很多属性,这里主要对WEB3DEPLOY介绍,可以WEB3DEPLOY代码部署到Geth网络上执行这些合约,稍后会讲解如果部署到Geth。
var demoContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"a","type":"uint256"},{"name":"b","type":"uint256"}],"name":"add","outputs":[{"name":"sum","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}]);
var demo = demoContract.new(
{
from: web3.eth.accounts[0],
data: '0x6060604052341561000f57600080fd5b60bf8061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063771602f7146044575b600080fd5b3415604e57600080fd5b606b60048080359060200190919080359060200190919050506081565b6040518082815260200191505060405180910390f35b600080828401905080915050929150505600a165627a7a723058209e5c6bc728b5b8f4f8830fd25dd27e856044c04f0582d7b922c52a4779e7ca040029',
gas: '4700000'
}, function (e, contract){
console.log(e, contract);
if (typeof contract.address !== 'undefined') {
console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
}
})
第一行是定义demoContract接口,第二行是实例化demoContract。
3.Run
点击右上方"Run"按钮,在点击“Create”按钮,会在内存中创建智能合约的实例。将WEB3DEPLOY部署在虚拟内存中。如下图所示:
![](https://img.haomeiwen.com/i5942767/811f2c3eab9ad22e.png)
点击“Details”展示以下信息:
![](https://img.haomeiwen.com/i5942767/6df557ff642227a4.png)
4.把合约部署到Geth
部署合约时,要把以太坊的私有链必须处在挖矿进行的状态,否则部署的合约不生效。部署合约需要消耗gas,也就是以太币。由于保护机制,不解锁账户不允许转出以太币。
1.解锁账户
acct0=eth.accounts[0]
personal.unlockAccount(acct0)
2. 把合约代码部署到Geth
把文中的WEB3DEPLOY代码复制Geth命令行。在Mac上使用Geth创建以太坊私有链详见文章:Geth创建以太坊私有链
![](https://img.haomeiwen.com/i5942767/b2cae2ab9b58655b.png)
如果看过Contract mined!,合约被部署到区块了。
调用合约命令:
demo.add.call(1,8)
demo.add.call(10,43)
![](https://img.haomeiwen.com/i5942767/a3fc9156580b5f22.png)
demo是实例名称,add是自定义函数。这样运行和执行合约,是不是很容易呢?
网友评论