在geth客户端部署智能合约

https://www.cnblogs.com/fengzhiwu/p/5629468.html 在geth上部署和调用智能合约完整教程
在geth客户端部署智能合约
1、编写智能合约源代码
source= "contract test { function multiply(uint a) returns(uint d) { return a * 7; } }";
2、编译智能合约
contract = eth.compile.solidity(source).test;
这种方式需要在geth客户端安装solidity编译器solc,这个我暂时还没有找到解决办法,以后研究。
我是用truffle客户端对智能合约进行编译的,编译之后,会生成一个合约对应的json文件。打开json文件,找到abi和bytecode在geth客户端进行定义。
var abi=[{"constant": false,"inputs": [{"name": "a","type": "uint256"}],"name": "multiply","outputs": [{"name": "","type": "uint256"}],"payable": false,"stateMutability": "nonpayable","type": "function"}];
var code="0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006008820290509190505600a165627a7a72305820af1e3196bec2eb276a849a388e9c47ad20541b590c500c78c062d516b5b8de680029";
3、创建智能合约对象
MyContract=eth.contract(abi);
4、部署合约。部署合约就是向以太坊上发送一个交易,目的地址不写就是发送给区块链
contract=MyContract.new({from:eth.accounts[0],data:code});
此时,可能会提示你账户不可用,就是没有解锁,用personal.unlockAccount()解锁即可,然后再部署
部署完之后查看contract,发现address是undefined,这是因为交易才发送出去,没有矿工挖矿,没有写进区块链,所以还不知道。可以用txpool.status查看到
5、启动挖矿
miner.start();admin.sleepBlocks(13);miner.stop();
挖矿之后,交易就写进区块链了,此时再查看contract就能看见有地址了。这样,智能合约就成功的部署在了以太坊上。

部署合约例子,带gas值和函数的
var browser_test_sol_test = browser_test_sol_testContract.new(
   {
     from: web3.eth.accounts[0], 
     data: '0x6060604052341561000f57600080fd5b61014f8061001e6000396000f300606060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303b067c1146100675780632d74eb541461008a57806341c0e1b5146100b3578063b1976a02146100c8575b600080fd5b341561007257600080fd5b61008860048080359060200190919050506100f1565b005b341561009557600080fd5b61009d6100fb565b6040518082815260200191505060405180910390f35b34156100be57600080fd5b6100c6610101565b005b34156100d357600080fd5b6100db61011a565b6040518082815260200191505060405180910390f35b8060008190555050565b60005481565b3373ffffffffffffffffffffffffffffffffffffffff16ff5b600080549050905600a165627a7a72305820bbd6b703b7105d973e93a71195c628268c59227321b4f6f3aa1c3a2b510525950029', 
     gas: '4700000'
   }, function (e, contract){
    console.log(e, contract);
    if (typeof contract.address !== 'undefined') {
         console.log('Contract mined! address: ' + contract.address + ' transactionHash: ' + contract.transactionHash);
    }
 })

猜你喜欢

转载自blog.csdn.net/MisshqZzz/article/details/79705910