ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Ubuntu16.04以太坊私有链开发和智能合约使用示例

2019-07-14 17:36:14  阅读:1415  来源: 互联网

标签:Ubuntu16.04 以太 personal ...... 示例 miner ......... eth type


下载和安装以太坊

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

创建一条私有链

新建genesis.json文件,用于配置第一条区块链:

{
  "config": {
    "chainId": 6666,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc":{
  	"0xbb2cfef4e893521d5d25e4c62a1c914b6259f3c3":{"blance":"0"},
	  "0x07fb49206f6e2b36c2a138261773ce5555122127":{"blance":"10000000000000000"},
  	"0x3f6115a9d38e05d825402711ce31030f44f8c790":{"blance":"50000000000000000"}
  },
  "difficulty": "0x500",
  "gasLimit": "0x21000000",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
 }

根据genesis.json文件完成区块链初始化:geth init ./genesis.json --datadir=./data/

启动区块链:geth --datadir=./data --networkid 6666 console --port 30304,同时进入Ethereum控制台。


基本操作

新建账户:personal.newAccount("password"),之后会返回账户的address。

personal.newAccount("123456")
"0x15a70668f15d10177724379f1983baee631e5793"
"0xbb2cfef4e893521d5d25e4c62a1c914b6259f3c3"
"0x07fb49206f6e2b36c2a138261773ce5555122127"
"0x3f6115a9d38e05d825402711ce31030f44f8c790"

设置miner的账户:miner.setEtherbase("address")

miner.setEtherbase("0x15a70668f15d10177724379f1983baee631e5793")

因为目前就一个机器,也就是一个节点,所以目前暂时就指定一个miner。

查余额:eth.getBalance("address")

eth.getBalance("0x15a70668f15d10177724379f1983baee631e5793")

开始挖矿:miner.start()
停止挖矿:miner.stop()

查看用户列表:personal.listAccounts

转账之前,要先解锁账号:personal.unlockAccount("address")

personal.unlockAccount("0x07fb49206f6e2b36c2a138261773ce5555122127")
personal.unlockAccount("0x3f6115a9d38e05d825402711ce31030f44f8c790")

转账:eth.sendTransaction({from: sender, to: receiver, value: amount})

eth.sendTransaction({from: "0x07fb49206f6e2b36c2a138261773ce5555122127", to: "0x3f6115a9d38e05d825402711ce31030f44f8c790", value:web3.toWei(100, "wei")})

查询交易:eth.getTransaction("transaction_id")

eth.getTransaction("0xffa558208194a3962638e66b5a632cdba0ea0508660e1ebc6dbf30e37a2a1a96")

发现block的id为null:

因为还没有miner去挖矿,也就是检验这笔交易,让miner挖一下之后,就有了:

查看该区块:

编写一个简单的智能合约

本例子编写一个简单的智能合约,作用是累加转账的金额,代码如下:

pragma solidity >0.4.23 <0.6.0;

contract sum {
    uint256 public x;
    address public creator;
    constructor() public {
        x = 0;
        creator = msg.sender;
    }
    
    function addy(uint256 y) public {
        x = x + y;
    }
}

remix.ethereum.org 上面粘贴代码并编译,得到二进制代码和abi:

将智能合约部署上链:eth.sendTransaction({from:sender, data:"网页端拷贝下来的0x开头的二进制代码",gas:234000})
之后得到contract的id:0x17B912de902750C86C31aB1e191aB410884890a6

保险起见,使用miner.start()挖一下。

使用智能合约:
mycontract = web3.eth.contract(括号里面填上网页端拷贝下来的abi)
例如:

mycontract = web3.eth.contract([
... {
...... "constant": true,
...... "inputs": [],
...... "name": "creator",
...... "outputs": [
...... {
......... "name": "",
......... "type": "address"
......... }
...... ],
...... "payable": false,
...... "stateMutability": "view",
...... "type": "function"
...... },
... {
...... "constant": true,
...... "inputs": [],
...... "name": "x",
...... "outputs": [
...... {
......... "name": "",
......... "type": "uint256"
......... }
...... ],
...... "payable": false,
...... "stateMutability": "view",
...... "type": "function"
...... },
... {
...... "constant": false,
...... "inputs": [
...... {
......... "name": "y",
......... "type": "uint256"
......... }
...... ],
...... "name": "addy",
...... "outputs": [],
...... "payable": false,
...... "stateMutability": "nonpayable",
...... "type": "function"
...... },
... {
...... "inputs": [],
...... "payable": false,
...... "stateMutability": "nonpayable",
...... "type": "constructor"
...... }
... ])

firstcontract = mycontract.at("contrast_address")
例如:

firstcontract = mycontract.at("0x17B912de902750C86C31aB1e191aB410884890a6")

测试:
firstconstract.creator()
firstconstract.x()里面为0

转账100试一下:

firstcontract.addy.sendTransaction(100,{from:"0x07fb49206f6e2b36c2a138261773ce5555122127",gas:2300000})

转完记得miner.start()挖一下

可见智能合约生效了,firstconstract.x累加到了100:

标签:Ubuntu16.04,以太,personal,......,示例,miner,.........,eth,type
来源: https://blog.csdn.net/MASILEJFOAISEGJIAE/article/details/95901537

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有