18910140161

以太坊ETH智能合约部署与交互实例

顺晟科技

2021-06-16 10:46:18

371

实验环境:windows_10系统桀斯客户端混音实度集成开发环境

实验目的:体验智能合约部署及交互

实验过程:

1、编写合约

2、编译合约、获取合约abi、合约二进制代码

3、使用合同定义合约类

4、二进制代码定义为变量

5、部署合约代码

6、查看合约交易明细

7、测试合约命名

8、通过合约名称测试合约函数

首先编写一个简单的合约:

合同样本{

无符号整型公共价值;

功能示例(uint v){

value=v;

}

功能集(uint v){

value=v;

}

函数get()返回常量(uint){

返回值;

}

}

在再搅拌网页编译得到踝肱指数接口和合约的二进制代码、

abi=[{'constant':true,' inputs':[],' name':'value ',' outputs':[{'name': ' ',' type':'uint256'}],' payable':false,' type':'function'},{'constant':false,' inputs ' :[{ ' name ' 33: ' v ','

[{

constant: true,

inputs: [],

名称: '值,

outputs: [{

名称: ' ',

type: 'uint256 '

}],

payable: false,

类型: '函数'

}, {

constant: false,

inputs: [{

名称: 'v ',

type: 'uint256 '

}],

名称: '套装,

outputs: [],

payable: false,

类型: '函数'

}, {

constant: true,

inputs: [],

名称: 'get ',

outputs: [{

名称: ' ',

type: 'uint256 '

}],

payable: false,

类型: '函数'

}, {

inputs: [{

名称: 'v ',

type: 'uint256 '

}],

payable: false,

type: "构造函数"

}]

需要使用eth。合同来定义一个合约类

示例=eth.contract(abi)

{

ab :[{

constant: true,

inputs: [],

名称: '值,

outputs: [{.}],

payable: false,

类型: '函数'

}, {

constant: false,

inputs: [{.}],

名称: '套装,

outputs: [],

payable: false,

类型: '函数'

}, {

constant: true,

inputs: [],

名称: 'get ',

outputs: [{.}],

payable: false,

类型: '函数'

}, {

inputs: [{.}],

payable: false,

type: "构造函数"

}],

eth: {

帐户s :['0x 4c 57 e7e 9 C2 f 728046 DDC 6 e 96052056 a 241 BDB 0a ','0xe 82 e2f 0 a5 Abd 8774767 b 9751659976 F9 C4 f 59181 '],

区块编号: 6225,

coin base : '0x 4c 57 e7e 9 c2f 728046 DDC 6 e 96052056 a 241 BDA ',

编译: {

lll:函数(),

蛇形:函数(),

实度:函数()

},

defaultAccount:未定义,

默认阻止: '最新,

汽油价格: 18000000000,

hashrate: 0,

mining: false,

挂起事务: [],

协议版本: '0x3f ',

syncing: false,

电话:函数(),

合同:函数(abi),

估计气体:函数(),

.

提交交易:函数(),

提交工作:函数()

},

at:函数(地址、回调),

getData:函数(),

new:函数()

}

合约的二进制代码赋值给SampleHEX方便使用

示例hex='0x 6060604052341561000 c 57 Fe 5b 60405160208061013 a 83398101604052808051906020019091905050505050505 b 8060819055505 b 605 f 9806100416039600000000005 b 808190555505 b 605 f 980610004160039600000

把合约代码部署上链

sample=sample.new(1,{from:eth.accounts[0],data:SampleHEX,gas:3000000})

{

ab :[{

constant: true,

inputs: [],

名称: '值,

outputs: [{.}],

payable: false,

类型: '函数'

}, {

constant: false,

inputs: [{.}],

名称: '套装,

outputs: [],

payable: false,

类型: '函数'

}, {

constant: true,

inputs: [],

名称: 'get ',

outputs: [{.}],

payable: false,

类型: '函数'

}, {

inputs: [{.}],

payable: false,

type: "构造函数"

}],

地址:未定义,

交易nhash : ' 0 xee 74 BCB 4461 c 9712 EC 9 ACA 96 a5 a 4a 3c 64 be 1213854d 519 fc 8 e 5432 b 554 f 7a 1 '

}

查看交易细节

样本recpt=eth。GettransActionReceive(' 0 xee 74 BCB 4461 c 9712 EC 9 ACA 96 a5 a 4a 3c 64 be 1213854d 519 fc 8 e 5432 b 554 f 7a 1 ')

{

区块有h : ' 0 xddba 16545 af 882835 FB 9 a 69 a 0 E5 F3 b 9287 c 61664837 D5 ea 0068 b 38575 CB 665 c 5 ',

区块编号: 6246,

合同地址: '0x 7504 fa 9d 64 ab 290844 b 82660d 43 b 310 F8 FBA 0276 ',

累计: 141836,

从: '0x 4c 57 e7e 9 c2f 728046 DDC 6 e 96052056 a 241 BDA ',

gasUsed: 141836,

logs: [],

logsbloom织机:’0x 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

根: '0x d 1093 ecaca 9 cc 0d 10 e 82 a 533 a 15 FEC cedf 7 ff 5c 79 FB 3 EBD 9366 EC 0 b 35 dbef 478 ',

到: null,

交易nhash : ' 0 xee 74 BCB 4461 c 9712 EC 9 ACA 96 a5 a 4a 3c 64 be 1213854d 519 fc 8 e 5432 b 554 f 7a 1 ',

transactionIndex: 0

}

合约命名

合同样本=样本。at('0x 7504 fa 9d 64 ab 290844 b 82660d 43 b 310 F8 FBA 0276 ')

{

ab :[{

constant: true,

inputs: [],

名称: '值,

outputs: [{.}],

payable: false,

类型: '函数'

}, {

constant: false,

inputs: [{.}],

名称: '套装,

outputs: [],

payable: false,

类型: '函数'

}, {

constant: true,

inputs: [],

名称: 'get ',

outputs: [{.}],

payable: false,

类型: '函数'

}, {

inputs: [{.}],

payable: false,

type: "构造函数"

}],

地址: '0x 7504 fa 9d 64 ab 290844 b 82660d 43 b 310 F8 FBA 0276 ',

transactionHash: null,

allEvents:函数(),

get:函数(),

set:函数(),

值:函数()

}

合约查看功能函数get(),然后调用set()函数,再get()查看时已经改变了

samplecontract.get.call()

合同样本。准备。SendTransaction(9,{from:eth.accounts[0],gas:3000000})

0x 822 ee 6 FB 4 caceb 7 e 844 c 533 f 7 F3 BC 57806 f 7 CB 3676 FB 3066 EB 848 cc a46 B2 f 38 a '

samplecontract.get.call()

9

我们再打开一个终端,打开集群一的peer02的控制台,直接在到上一个终端部署的智能合约地址并进行设置操作

root @ ubu-区块链2: ~/ether eum-docker/ether eum-docker/ether eum-test net-docker/dockercomposefiles # docker run-I区块链101/ether eum-geth :1。6 .5 geth attach 335845。33343434432

欢迎使用Geth JavaScript控制台!

abi=[{'constant':true,' inputs':[],' name':'value ',' outputs':[{'name': ' ',' type':'uint256'}],' payable':false,' type':'function'},{'constant':false,' inputs ' :[{ ' name ' 33: ' v ','

示例=eth.contract(abi)

示例hex='0x 6060604052341561000 c 57 Fe 5b 60405160208061013 a 83398101604052808051906020019091905050505050505 b 8060819055505 b 605 f 9806100416039600000000005 b 808190555505 b 605 f 980610004160039600000

直接把合约地址赋值并进行设置操作

合同样本=样本。at('0x 7504 fa 9d 64 ab 290844 b 82660d 43 b 310 F8 FBA 0276 ')

samplecontract.get.call()

9

备注:每一次的合约部署及合约交易需要使用挖矿程序来执行交易

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航