主页 > imtoken苹果闪退 > 使用镜像构建一个新的以太坊节点并部署合约(演示)

使用镜像构建一个新的以太坊节点并部署合约(演示)

imtoken苹果闪退 2023-04-26 05:11:12

我们自己搭建了一个镜像,里面包含了以太坊需要的环境和这条私链的创世块。 现在使用这个镜像来运行一个容器以太坊全球节点数量,我们可以快速搭建一个连接私链的节点。

1 docker run -it –name node6 daocloud.io/ubuntu/node

2 接下来的操作都在node6容器中。 我们已经将创世块放在 privategeth 目录中,所以进入这个目录。 此时目录下只有genesis.json文件:

cd privategeth

可以看到我们的创世块

{
   "config": {
        "chainId": 12345,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x400",
    "extraData" : "0x123456",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000042",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": { }
}

2.1 创建数据存储目录路径并初始化创世块

geth –datadir ./data  init genesis.json 

2.2 进入geth的交互平台:

geth –identity “haha” –datadir ./data –networkid 12345 –rpcapi “db,eth,net,web3” –port 2220 –rpcport 3330 –bootnodes “enode://5d1f52b69d7473389e77475a1e972f45215b184ad6734e9b77088f00cc311fe493ed8352359685dee79c64db50041351da60785801328cb5ada82ab206287d1c@172.18.0.2:2220” console

3 现在我们进入geth交互平台以太坊全球节点数量,开始一些基本操作

4 部署和调用智能合约

 function Sample(uint v){
                value=v;
      }
      function set(uint v){
                value=v;
      }
      function get() constant returns (uint){
                return value;
      }
} 

1)首先在以太坊智能合约的浏览器编译器中编译合约,得到abi接口和二进制代码

分配给abi

abi=[{"constant":true,"inputs":[],"name":"value","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"v","type":"uint256"}],"name":"set","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[{"name":"v","type":"uint256"}],"payable":false,"type":"constructor"}]

2) 你需要使用 eth.contract 来定义一个合约类

sample=eth.contract(abi)

3)将合约的二进制代码赋值给SampleHEX,方便使用SampleHEX=""

4)部署合约,将1传给合约进行初始化

thesample=sample.new(1,{from:eth.accounts[0],data:SampleHEX,gas:3000000})

5) 通过已部署合约返回的交易哈希查看合约详情

samplerecpt=eth.getTransactionReceipt("0x1d875c7ea3a19458c0ec1473f6c643ebb90c400406f3c160660d12aa3a520995")

6)通过交易明细获取的合约地址,用于合约命名

samplecontract=sample.at("0x80a52a1e0daa54dc6ce3a5bea84cce9c39b162e5")

7)调用合约

调用get()函数查看,变量的值没有变化,可以不花gas使用call

samplecontract.get.call() 

调用set()函数改变合约参数,所以必须是交易的形式,

samplecontract.set.sendTransaction(9, {from:eth.accounts[0], gas:3000000})