美文网首页
罗韭菜的超详细dapp从零实战(三)-- 智能合约部署(用rem

罗韭菜的超详细dapp从零实战(三)-- 智能合约部署(用rem

作者: 罗雪Melody | 来源:发表于2018-04-12 10:13 被阅读0次

编写智能合约代码

pragma solidity ^0.4.4;

contract test { 
    
    function multiply(uint a) returns(uint d){
        
        return a * 7;
    }
}

获取智能合约字节码和abi

  • 用truffle获取,详见上一章
  • 用remix获取:代码拷贝到https://remix.ethereum.org,编译,然后拷贝字节码和ABI。

字节码
合约代码转化为16进制以后的数据,所以记得加上0x!!

0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820b1b22e476dba064d783813defae9aeb370c57fb48b012fd4a9e2c0cee54010670029

用code 存起来

> var code = "0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820b1b22e476dba064d783813defae9aeb370c57fb48b012fd4a9e2c0cee54010670029"
undefined
> code
"0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820b1b22e476dba064d783813defae9aeb370c57fb48b012fd4a9e2c0cee54010670029"
> 

ABI
在这里应该用solc来获取比较好,但是笔者怎么都装不上solc于是用另外的方法。
在[http://www.bejson.com]删除空格

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

解锁有以太币的账号

> personal.unlockAccount(personal.listAccounts[1])
Unlock account 0xc2dec5a4c6e0e55651baaf9be4f91dbf2aadc017
Passphrase: 
true

预估合约需要的gas费

> web3.eth.estimateGas({data:code})
99930

部署合约

  • 创建合约对象
> var myContract = eth.contract(abi);
  • 实例化:
    from有余额的解锁账号
    gas费用需要大于预估的gas费
var contract = myContract.new({from:personal.listAccounts[1],data:code,gas:100000});
undefined
> contract
{
  abi: [{
      constant: false,
      inputs: [{...}],
      name: "multiply",
      outputs: [{...}],
      payable: false,
      stateMutability: "nonpayable",
      type: "function"
  }],
  address: undefined,
  transactionHash: "0x8486197429110bad4591157ce26db5b0a855cda40aabd44b949f67c17b66f915"
}
> 
  • 挖矿之后,调用
> miner.start()
null
> miner.stop()
true
> txpool.status
{
  pending: 0,
  queued: 0
}
> eth.getCode(contract.address)
"0x606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820b1b22e476dba064d783813defae9aeb370c57fb48b012fd4a9e2c0cee54010670029"
> contract.address
"0x12918ddf1b06ca989809382c10190e61319c0406"
> contract.multiply.call(6);
42
> 

相关文章

网友评论

      本文标题:罗韭菜的超详细dapp从零实战(三)-- 智能合约部署(用rem

      本文链接:https://www.haomeiwen.com/subject/gigzhftx.html