发布第一个合约

编写合约

创建一个私有链 https://www.jianshu.com/p/48e3073099b4

pragma solidity ^0.4.0;
contract SimpleStorage {
    uint storedData;
    function set(uint x) {
        storedData = x;
    }
    function get() constant returns (uint) {
        return storedData;
    }
}

编译合约

发布合约

  • 提交合约
    将WEB3DEPLOY中的代码粘贴到ethe console中,并回车执行
  • 挖矿来让合约发布到私链区块中
    miner.start()
  • miner.stop()

调用合约函数

下面我们调用set来为状态变量storedData赋值。由于我们的set函数是要改写链上数据的,所以需要使用sendTransaction来调用。为了使用sendTransaction来调用链上合约,首先我们需要获得函数的签名的函数选择器(Function Selector)。将函数签名传入sha3函数生成hash256,hash的前4个字节即函数选择器的值。
在geth命令行输入如下命令,获取set函数哈希:
web3.sha3("set(uint256)")
设置变量值,执行
eth.sendTransaction({from:eth.accounts[0], to:simplestorage.address, value:0, data:"0x60fe47b10000000000000000000000000000000000000000000000000000000000001234"})
其中

simplestorage是编译合约时生成的contract实例,from:为调用者的账户。
to:为合约地址。
value:由于此调用的目的不是转账,所以此值为0。
data: 描述了调用那个函数及使用什么参数。格式为:前4个字节为函数选择器。这里是要调用set函数所以为0x60fe47b1,后面紧跟着参数。由于set的参数只有一个uint(uint256),字长为32字节。这里设置的值为0x1234。

挖矿来使函数调用得以执行,
执行
miner.start()
挖一小会儿后,执行
miner.stop()
最后,查看结果,执行
eth.getStorageAt(simplestorage.address,0)
返回值为0x1234,说明调用set函数成功,或
simplestorage.get()
返回值为0x1234的十进制4660。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以太坊白皮书地址:https://github.com/ethereum/wiki/wiki/White-Pape...
    rectinajh阅读 17,889评论 0 46
  • 以太坊(Ethereum ):下一代智能合约和去中心化应用平台 翻译:巨蟹 、少平 译者注:中文读者可以到以太坊爱...
    车圣阅读 3,810评论 1 7
  • 我有一个儿时的伙伴,长大后由于工作不生活在一个城市,心里惦念着,但并不一定时常联系,会特地去翻翻他的朋友圈,...
    美丽苏珊阅读 681评论 0 1
  • 将一株翻墙的紫藤拨回原位 一篇属于它的番外就此写成 于是 我把它同杏花锁进一处 等春来的时候 托付给蝴蝶 或者 匆...
    Xx山茶阅读 228评论 1 7
  • 怨怼让我变得好丑,还好,你们喜欢且包容。 我想检讨一下自己。 杭州一行让我满感欢乐和解脱,所以一颗心浮着,不想落地...
    刘老师说教育阅读 200评论 1 0