2018-11-26 ewasm在以太坊私有链测试

本文参考《ewasm/testnet》,《Ewasm community hangout》整理如下:

1、ewasm私有链的搭建

开发环境:virtualbox虚拟机 Ubuntu18.0

1.1 编译ewasm版本的go ethereum

mkdir testnet

cd testnet

go get -u -v github.com/ethereum/go-ethereum

git clone https://github.com/ewasm/go-ethereum -b ewasm-testnet-milestone1

cd go-ethereum

make geth

cd ..

cp go-ethereum/build/bin/geth .

1.2 编译ewasm虚拟机hera

git clone https://github.com/ewasm/hera --recursive -b ewasm-testnet-milestone1

cd hera

mkdir build && cd build

cmake .. -DBUILD_SHARED_LIBS=ON

cmake --build .

cd ../../

cp hera/build/src/libhera.so .

1.3 拉取初始化配置

wget https://raw.githubusercontent.com/ewasm/testnet/master/ewasm-testnet-geth-config.json


ls 

显示如下内容:

ewasm-testnet-geth-config.json geth go-ethereum hera libhera.so

1.4 初始化私有链

./geth --datadir ewasm-testnet-data init ewasm-testnet-geth-config.json

1.5 启动私有链

./geth \

--vm.ewasm="$HOME/testnet/libhera.so,metering=true,fallback=true" \

--datadir ewasm-testnet-data \

--rpc --rpcapi "web3,net,eth,debug" \

--rpcvhosts="*" --rpcaddr "0.0.0.0" \

--rpccorsdomain "*" \

--nodiscover \

--networkid 66 \

--ipcpath geth1.ipc console

1.6 配置私有链

再启动一个终端,执行

./geth attach $HOME/testnet/ewasm-testnet-data/geth1.ipc

创建两个账号:

personal.newAccount("123")

personal.newAccount("123")

配置coinbase

miner.setEtherbase(eth.accounts[0])

挖矿

miner.start()

查看账号信息:

eth.getBalance(eth.accounts[0])


2、metamask的安装和连接到私有链

打开https://metamask.io/安装chrome插件

安装成功后,在浏览器工具栏出现一个小狐狸的图标

点击小狐狸,注册登录后,在右上角网络中选择localhost 8545

选择右上角的圆饼图标,导入账号,类型选择jsonfile,选择目录上上面创建的ewasm-testnet-data下keystore目录下,导入成功后,显示当前账号以太币(如果开始挖矿了,这个地址是有币的),当前账号地址:0xD1726624591b577E1DBa12b770A8762f101d35a5(这个每个人的不一样,只是为了和下面的对应)

3、ewasm合约的发布和调用

3.1 发布合约

打开http://ewasm.ethereum.org/studio/

value输入:10000

Contract Code (WAST)输入:

(module

  (type $t0 (func (param i32 i32)))

  (type $t1 (func (result i64)))

  (type $t2 (func))

  (type $t3 (func (param i64)))

  (import "ethereum" "storageStore" (func $ethereum.storageStore (type $t0)))

  (import "ethereum" "storageLoad" (func $ethereum.storageLoad (type $t0)))

  (import "ethereum" "getBlockNumber" (func $ethereum.getBlockNumber (type $t1)))

  (import "ethereum" "useGas" (func $ethereum.useGas (type $t3)))

  (func $main (export "main") (type $t2)

    (call $ethereum.useGas

      (i64.const 19))

    (i32.store

      (i32.const 512)

      (i32.const 88))

    (i32.store

      (i32.const 1024)

      (i32.const 99))

    (i64.store

      (i32.const 32)

      (call $ethereum.getBlockNumber))

    (call $ethereum.storageStore

      (i32.const 512)

      (i32.const 32))

    (call $ethereum.storageLoad

      (i32.const 512)

      (i32.const 2048))

    (call $ethereum.storageStore

      (i32.const 1024)

      (i32.const 2048)))

  (memory $memory (export "memory") 1))


然后点击submit transaction

打开了metamask窗口,确认提交,获得交易hash:0xf55fc03132aab55593f10a022db330c36e75812775637b21317aff0262d20c2a

3.2 查询合约信息

打开geth客户端:

./geth attach http://127.0.0.1:8545

查看合约交易:

eth.getTransactionReceipt("0xf55fc03132aab55593f10a022db330c36e75812775637b21317aff0262d20c2a")

获得合约地址:

{ blockHash:"0x2c2fab382202ad475fdf0fd73070e8272d34d6665025570f339df029afbe2955", blockNumber:1976, contractAddress:"0x4d913aafa689a69307fef8b5e066166a82be422f", cumulativeGasUsed:119736, from:"0x12cb7d4e35a280e27e9b7061dc41b9cacd93be85", gasUsed:119736, logs: [], logsBloom:"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", status:"0x1", to:null, transactionHash:"0xf55fc03132aab55593f10a022db330c36e75812775637b21317aff0262d20c2a", transactionIndex:0}

其中合约地址是0x4d913aafa689a69307fef8b5e066166a82be422f

获得合约代码:

eth.getCode("0x4d913aafa689a69307fef8b5e066166a82be422f")

3.3 调用合约

打开http://ewasm.ethereum.org/studio/

Destination Address输入:0x4d913aafa689a69307fef8b5e066166a82be422f (这个就是上面获取的合约地址)

value输入:10000

Contract Code (WAST)输入空

然后点击submit transaction

打开了metamask窗口,确认提交,获得交易hash:0xbde239cd7c48f422070f43a9c586c43c79789ef2bbebc9de403c02eb1aafc281

在私有链上还没有找到方法查看当前合约执行的结果

solidity是通过abi调用查看接口,这里还没有搞明白,不过后面如果不是有私有链,而是是有以太坊提供的ewasm testnet就可以查看

4、使用ewasm testnet发布和调用合约

4.1 设置metamask调用ewasm testnet

选择private network,在new rpc url中填入:

http://ewasm.ethereum.org:8545

选择save

查看当前metamask帐号的地址:

0xD1726624591b577E1DBa12b770A8762f101d35a5

打开http://ewasm.ethereum.org/faucet/

查看user下的地址,应该也是0xD1726624591b577E1DBa12b770A8762f101d35a5

如果不是就需要在metamask的设置里面reset Account

选择request 1 ether from faucet,给自己的账户转1个以太币

在http://ewasm.ethereum.org/explorer/查看Recent Transactions,这里显示了刚才的转账信息

查看metamask的账户已经有了1 eth

4.2 发布合约

打开http://ewasm.ethereum.org/studio/

value输入:10000

Contract Code (WAST)输入:

(module

  (type $t0 (func (param i32 i32)))

  (type $t1 (func (result i64)))

  (type $t2 (func))

  (type $t3 (func (param i64)))

  (import "ethereum" "storageStore" (func $ethereum.storageStore (type $t0)))

  (import "ethereum" "storageLoad" (func $ethereum.storageLoad (type $t0)))

  (import "ethereum" "getBlockNumber" (func $ethereum.getBlockNumber (type $t1)))

  (import "ethereum" "useGas" (func $ethereum.useGas (type $t3)))

  (func $main (export "main") (type $t2)

    (call $ethereum.useGas

      (i64.const 19))

    (i32.store

      (i32.const 512)

      (i32.const 88))

    (i32.store

      (i32.const 1024)

      (i32.const 99))

    (i64.store

      (i32.const 32)

      (call $ethereum.getBlockNumber))

    (call $ethereum.storageStore

      (i32.const 512)

      (i32.const 32))

    (call $ethereum.storageLoad

      (i32.const 512)

      (i32.const 2048))

    (call $ethereum.storageStore

      (i32.const 1024)

      (i32.const 2048)))

  (memory $memory (export "memory") 1))


然后点击submit transaction

打开了metamask窗口,确认提交

在http://ewasm.ethereum.org/explorer找到交易:

http://ewasm.ethereum.org/explorer/tx/0xc53eef833c124ce0532d945ea08fcf740aba3ca410b7a77daed417079d711465

查看合约:http://ewasm.ethereum.org/explorer/account/0x30E54056A60C70a1548ff4589ADA634dd0119aa3

4.3 调用合约:

打开http://ewasm.ethereum.org/studio/

Destination Address输入:0x30E54056A60C70a1548ff4589ADA634dd0119aa3

value输入:10000

Contract Code (WAST)输入空

然后点击submit transaction

打开了metamask窗口,确认提交

同样查看合约:http://ewasm.ethereum.org/explorer/account/0x30E54056A60C70a1548ff4589ADA634dd0119aa3

这个时候Storage有值了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容