主页 > imtoken官方下载 > 部署私有链以太坊智能合约

部署私有链以太坊智能合约

imtoken官方下载 2023-06-10 06:58:56

部署智能合约的步骤是:启动一个以太坊节点(例如geth或testrpc)。 使用 solc 编译智能合约。 => 获取二进制代码。 将编译好的合约部署到网络上。 (这一步会消耗以太币,同时你还需要使用你节点的默认地址或者指定地址来签署合约。)=> 获取合约的区块链地址和ABI(合约接口的JSON表示,包括变量以太坊可以运行智能合约,事件和调用的方法)。 (译注:作者在这里混淆了ABI和合约接口以太坊可以运行智能合约,ABI是合约接口的二进制表示。)使用web3.js提供的JavaScript API调用合约。

智能合约.png

Brew macOS 包管理器

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

复制

go的安装环境

brew install go

复制

安装geth

npm install -g solc

复制

Solidity 以太坊智能合约语言

brew  install solidity

复制

geth控制台会启动节点,而geth attach是通过rpc或者ipc与启动的节点进行交互的。所以两者还是有很大区别的。 在geth控制台可以使用所有模块的API,但是geth attach只能使用已经打开的模块的API。 如果节点没有开启rpc geth attach连节点都连接不上

1、启动一个以太坊节点

以太坊智能合约取款_以太坊可以运行智能合约_以太坊智能合约的众筹

1,geth --datadir "./" --nodiscover console

复制

2,user1 = eth.accounts[0]

复制

“0xa4aa2105cc3e6b6a83faaaf72782d1e9a68e90ca”

> eth.getBalance(user1)

复制

1.156e+21

> user2 = eth.accounts[1]

复制

“0x33481f6d7b7f4ff430397913af1eaf582f3f4391”

> eth.getBalance(user2)

复制

4000000000000000000

2. 智能合约代码:

contract Multiply7 {

以太坊智能合约取款_以太坊智能合约的众筹_以太坊可以运行智能合约

event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input * 7; } }

复制

3.获取abiDefinition和字节码,

通过编译智能合约或solc编译

合同1.png

契约2.png

我们先把合约代码压缩成一行。 新建一个ssh会话,切换到geth用户环境su - geth,输入:cat contracts/Token.sol | tr '\n' 空间 '空间'。

转义为字符串

 abi=[{"constant":false,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

复制

截图 2018-03-03 下午 8.10.55.png

以太坊智能合约取款_以太坊可以运行智能合约_以太坊智能合约的众筹

4.看黑板:字节码前加0x

bytecode="0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820e8baa72a4bd1ffe2e8fa51812e8d65fc7b145baf48382c4ae5039510fd35a6ff0029"

复制

5.通过实例化abiDefinition和字节码创建合约

var contract = eth.contract(abi);

复制

var initializer = {from:web3.eth.accounts[0],data:bytecode,gas:300000};
personal.unlockAccount(user1,"jianghua")

复制

var token = contract.new(initializer)

复制

截图 2018-03-03 下午 8.12.37.png

截图 2018-03-03 下午 8.13.02.png

信息 [03-03|17:25:44] 提交的合同创建全哈希=0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b 合同=0x1BeEf17Dac85D369d41C84D989

6.需要通过挖矿步骤确认合约地址

miner.start(4)

以太坊智能合约的众筹_以太坊可以运行智能合约_以太坊智能合约取款

复制

 admin.sleepBlocks(2)

复制

      miner.stop()

复制

至此,合约的部署已经部署在区块链上。

7.通过合约地址,实例化自己的合约并调用

mycontract = contract.at(token.address)

复制

截图 2018-03-03 8.10.09 pm.png

{ abi: [{ constant: false, inputs: [{...}], name: "multiply", outputs: [{...}], payable: false, stateMutability: "nonpayable", type: "function" }], 地址: "0x1beef17dac85d369d41a9891276d58fc8f877a24", transactionHash: null, allEvents: function(), multiply: function() }

8、至此,合约的部署和调用就完成了

mycontract.multiply.call(2)

复制

此时,我们可以得到我们合约的返回值14

9.预估手续费

以太坊可以运行智能合约_以太坊智能合约的众筹_以太坊智能合约取款

web3.eth.estimateGas({data:bytecode})

复制

10.查看合约是否部署成功

eth.getCode("0x1beef17dac85d369d41a9891276d58fc8f877a24")

复制

"0x606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820e8baa72a4bd1ffe2e8fa51812e8d65fc7b145baf48382c4ae5039510fd35a6ff0029"

11.验证区块内容

截图 2018-03-03 下午 6.34.03.png

eth.getBlock(2550)

复制

{ difficulty: 314416, extraData: "0xd783010802846765746886676f312e31308664617277696e", gasLimit: 4712388, gasUsed: 99930, hash: "0x57ca73b779ae13c542f0421fc81a272fc6ce938aab1951b412f8813b6dc5bc8e", logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", miner: "0xa4aa2105cc3e6b6a83faaaf72782d1e9a68e90ca", mixHash: "0xecee4f13a617954c9bfe19e14bdf00c6b0d006d16e19e7474faa8de49eb74bf9", nonce: "0x39f04fd757c3fab6", number :2550,parentHash:“0xcdfb7e8f78f86e942acfe5a9a1f1ef3637a77cd96ebf35f28e6880e40e94fa0c”,receiptsRoot:“ 0 xea304d377e8d7db719679ecfb3900e0b6c18469512ac3ba1c74c754e54f73d9e", sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", size: 830, stateRoot: "0x69c10e0e14757623f279f8df6564659f1ac4cf25ab2ec559acedb964315804f7", timestamp: 1520069708, totalDifficulty: 589085710, transactions: ["0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b"], transactionsRoot: "0xba26a1e628172e65320c9d9474148763c03bd16513fc63b425f781537d542aa9", uncles: [] }

12.验证交易信息

截图 2018-03-03 下午 6.33.37.png

eth.getTransaction("0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b")

复制

{ blockHash: "0x57ca73b779ae13c542f0421fc81a272fc6ce938aab1951b412f8813b6dc5bc8e", blockNumber: 2550, from: "0xa4aa2105cc3e6b6a83faaaf72782d1e9a68e90ca", gas: 300000, gasPrice: 0, hash: "0x7e1bd79681ee748b1057f123a9951652e67232c2624631a5531edb0bb629e88b", input: "0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820e8baa72a4bd1ffe2e8fa51812e8d65fc7b145baf48382c4ae5039510fd35a6ff0029", nonce: 4, r: "0x4a3d67e18204891de590b634ef34cdff373a199f0640fa5d11b91b4788ad8290", s: " 0x45467daa1b578c05e5b2c64b564a41a306d7e1ecc21ce1b472290b719fecc77c", to: null, transactionIndex: 0, v: "0xfe7", value: 0 }

验证合约的部署和调用无误,大功告成!