智能合约 hello world
这是智能合约的入门教程,从hello world开始智能合约之旅。
一、安装ubuntu系统
1、从官网下载ubuntu server 镜像【下载地址】
2、安装virtualbox
3、安装ubuntu虚拟机(注意,安装时,第一个语言选项必须选择English,不然会安装失败)
二、安装geth工具
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
三、创建以太坊私人节点
1、创建配置文件
配置文件中chainId为该网络的标识符(正式网络为1),可以随机填写
difficulty为难度值,如果需要快速挖矿,建议降低难度值
2、初始化
geth --datadir eth-data init genesis.json
3、启动节点
geth --datadir ./eth-data --networkid 110 --rpc --rpcapi "db, eth, net, web3,debug, admin, personal, miner" --rpcaddr "172.168.10.5" --rpccorsdomain "*"
此处networkid应该和配置文件中的chainId一致,rpcaddr与本机ip保持一致
4、创建用户
personal.newAccount()创建用户,通过eth.accounts查看用户
5、挖矿
通过 geth attach 172.168.10.5:8545 ,连接节点,然后miner.start() 开始挖矿,miner.stop()停止挖矿。挖矿产生的以太币会默认存储到创建的第一个用户地址上,可以通过eth.getBalance(eth.coinbase) 查看余额。
四、编译发布helloworld智能合约
1、编写智能合约
pragma solidity ^0.4.0;
contract HelloWorld {
function helloWorld() public returns (string){
return "hello world !";
}
}
2、编译
在 remix 在线编译工具 中创建文件,写入上述智能合约代码。 点击start to compile 。编译完成后点击Details,获取ABI(后面调用时需要)
ABI:[{"constant":false,"inputs":[],"name":"helloWorld","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
3、发布
点击run按钮选择环境(Environment)为 Web3 provider ,填入我们启动的节点地址172.168.10.5:8545(ip根据实际情况填写)。
连接后,选择账户为eth.coinbase(理论上为我们创建的账户),选择合约HelloWorld。点击create 进行创建。
创建过程中会显示creation of HelloWorld pending...
此时,需要进行上述挖矿程序。挖矿产生了新区块。则合约创建成功。会展示出合约地址,如下所示(红色方框中为合约地址)。
五、运行
1、连接节点
geth attach 172.168.10.5:8545。
2、调用合约方法
> abi =[{"constant":false,"inputs":[],"name":"helloWorld","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
> hello=eth.contract(abi).at(‘0x7a9c2864d28062db8f7305c15cce5237dde15add’);
> hello.helloWorld.call();
> hello world !
注意:0x7a9c2864d28062db8f7305c15cce5237dde15add 为合约地址
如上所示,通过对helloWorld方法的调用,成功输出了 “hello world !”。
恭喜你,迈出了智能合约的第一步!