以太坊从搭建环境到部署合约

1.安装geth
add-apt-repository -y ppa:ethereum/ethereum
apt-get update
apt-get install ethereum

 

2.以快速同步方式同步区块
nohup(后台执行) geth(geth操作) --cache 4096(cache大小) --datadir /home/pyp/data/master_light(同步数据目录) --maxpeers 9999(最大连接节点数量) --rpc(协议) --rpcapi db,eth,net,web3,admin,personal,txpool(启用这些功能) --rpcport 8545 (端口号)--syncmode "light"(同步方式) &(后台执行结尾符号)

 

3.进入到以太坊操作命令行
geth attach --datadir /home/pyp/data/master_light

 

4.创建以太坊账号

密码我这里为设置123456

personal.newAccount("123456")

返回一个新的以太坊账号地址

如:0x55c8040eb4e4e4ef90a5de30e4301408413955e9

 

5.向新账号转入以太坊

没有余额的账户是没法部署合约的,那我们就向此账户转1以太坊,成功后查询余额

web3.fromWei(web3.eth.getBalance(('0x55c8040eb4e4e4ef90a5de30e4301408413955e9'), 'ether')

 

6.解锁账号

在部署合约前需要先解锁这个新账户(就像银行转账要输入密码一样),使用以下命令:

personal.unlockAccount("0x55c8040eb4e4e4ef90a5de30e4301408413955e9","123456")

 

7.编写合约代码

pragma solidity ^0.4.24;//当前solidity版本
contract data {
    string myString;

    //构造函数
     constructor(string _myString) public {
        myString = _myString;
    }
    //获取data,无需gas
    function getMyString() constant public returns (string) {
        return myString;
    }
    //设置改变data,需要gas
    function setMyString(string _myString)  public payable{
        myString = _myString;
    }
}

定义了一个名为的智能合约,在智能合约初始化时保存了一个字符串,每次调用getMyString返回字符串,每次调用setMyString改变字符串

 

8.编译代码

这里我们选择一个在线编译器将上面的合约编译

打开http://remix.ethereum.org/ 将写好的合约代码粘贴进去

以太坊从搭建环境到部署合约_第1张图片

点击details按钮,在弹出的对话框中找到WEB3DEPLOY部分,点拷贝,粘贴到我们本地的编辑器里

以太坊从搭建环境到部署合约_第2张图片

编译器内代码,修改初始化字符串为hello world。

以太坊从搭建环境到部署合约_第3张图片

这里解释下代码
第1行:修改过输入字符串为Hello World。
第2行:用eth.contract来定义一个合约类(ABI接口)。
第3行:部署创建合约实例,并修改合约实例名,之后可以直接用实例调用函数。
第4行:创建实例时的入参。
第6行:部署合约的账户,该账户需先解锁,不然会报错,这里用新账户部署。
第7行:data里为合约的编译后的二进制代码。
第8行:准备付的gas费用,IDE已经帮我们预估好了。
第9行:设置部署回调函数。

9.执行部署合约

拷贝编辑好的代码到geth控制台里,回车,看到返回结果
transactionHash: 0x2ba1c9ec9906550e7ca026e31b46eae0db921429c024df1f8a022c41bc507a32,为交易号(部署智能合约也是一笔交易)
address: 0x0bc4d7f46cfb79fb149c37a55f855c2f0e3dbb05,为智能合约的账户地址

现在我们查看下新账户的余额,已经消耗掉了一些gas

10.运行合约

运行hello.getMyString() ,输出hello world,成功运行了,且没有消耗gas。

11.重新赋值

hello.setGreeting.sendTransaction('hello boy',{from:"0x55c8040eb4e4e4ef90a5de30e4301408413955e9", gas:3000000})

12.继续运行合约

运行hello.getMyString() ,输出hello boy,成功运行了,且没有消耗gas。

你可能感兴趣的:(以太坊从搭建环境到部署合约)