智能合约的部署和调用不止以下描述的方法,之后再补充
在在线remix IDE编写solidity代码,编写以下代码
pragma solidity ^0.4.25;
contract Test{
uint balance = 1;
function set(uint x) public{
balance = x;
}
function get()public view returns(uint){
return balance;
}
}
这是一个很简单的类,主要是等会通过查看balance的值来验证智能合约的调用。
注意^0.4.25应该和编译器版本一致
(1)在remix编译成功,点击Details按钮,弹出下图
(2)将WEB3DEOLOY的内容复制
粘贴到geth终端,回车,将智能合约部署到交易发送出去。
注意默认发送方为第一个账号,可以修改,但发送交易前记得解锁账号。
(3)挖矿,将智能合约写入区块链并挖矿成功,若返回合约地址以及交易哈希则证明成功。
此时输入
test.get()
返回1.
输入以下代码调用智能合约,代表第二个账号发起调用交易,2为参数。
test.set(2,{from:eth.accounts[1]})
挖矿,将交易写进区块链并更新状态。
继续输入
test.get()
返回2,调用成功。
通过eth.getBlock(4)获得第5个区块的各个字段,解释及图片如下:
extraData:字符串,是这个区块的额外信息,可为空
gasLimit:当前区块允许使用的最大gas数
gasUsed:该区块实际累计使用的gas数
hash:该区块的hash串,挖矿结果
logsBloom:该区块日志的布隆过滤器
miner:矿工账号,代表该区块获得奖励的矿工
mixHash:与以太坊的挖矿有关,与nonce组合,可以证明付出一定计算
nonce:矿工争夺记账权生成的值
number:该区块的下标,这个区块的number位4
parentHash:父区块的哈希值
receiptsRoot:区块上所有交易的收据树的根
sha3Uncles:叔区块的哈希值
size:该区块的字节大小
stateRoot:区块的状态前缀树的根
timestamp:时间戳
totalDifficulty:创始区块到当前区块的总难度值
transactions:该区块的所有交易,一串数代表一个交易
transactionRoot:区块的交易前缀树的根
uncles:该区块的所有叔区块,一串数代表一个叔区块
如下图:通过交易的ID号,获取该交易信息,下图的交易为部署智能合约的交易
blockNumber:交易所在区块的下标
from:发送方的账号
gas:交易发起者愿意支付的最大gas数量
gasPrice:交易发起者愿意支付的gas价格 。
hash:该交易的hash
input:即data,在智能合约调用的交易中是调用的函数以及参数,如果是部署智能合约的话就是智能合约的ABI。
nonce:区别同一个账号的不同交易
to:接送方账号,如果是部署智能合约,该值为0(null),如果是调用函数,则是合约地址。
r,s,v:交易签名的三个部分,由发送者的私钥对交易hash进行签名生成。
value:转账数。
transactionIndex:该交易在区块中的下标。
eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
web3:包含了以上对象,还包含一些单位换算的方法