以太坊私有链的智能合约基础操作(一)

智能合约的部署和调用不止以下描述的方法,之后再补充

一、智能合约

1. 编写智能合约

在线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应该和编译器版本一致

2. 调试编译智能合约

点击编译按钮,变绿则编译成功,变红则会显示报错警告。
在这里插入图片描述

3. 部署智能合约

(1)在remix编译成功,点击Details按钮,弹出下图

在这里插入图片描述

(2)将WEB3DEOLOY的内容复制

粘贴到geth终端,回车,将智能合约部署到交易发送出去。

注意默认发送方为第一个账号,可以修改,但发送交易前记得解锁账号。

(3)挖矿,将智能合约写入区块链并挖矿成功,若返回合约地址以及交易哈希则证明成功。

4.调用智能合约

此时输入

test.get()

返回1.

输入以下代码调用智能合约,代表第二个账号发起调用交易,2为参数。

test.set(2,{from:eth.accounts[1]})

挖矿,将交易写进区块链并更新状态。

继续输入

test.get()

返回2,调用成功。

二、字段解释

1. getBlock区块字段

通过eth.getBlock(4)获得第5个区块的各个字段,解释及图片如下:

在这里插入图片描述
difficulty:当前块的出矿难度

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:该区块的所有叔区块,一串数代表一个叔区块

2. getTransaction交易字段

如下图:通过交易的ID号,获取该交易信息,下图的交易为部署智能合约的交易

在这里插入图片描述
blockHash:交易所在的区块的哈希值

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:包含了以上对象,还包含一些单位换算的方法

猜你喜欢

转载自blog.csdn.net/chenxz_/article/details/83785720