携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
什么是内建对象
智能合约(solidity)本身是一门运行在以太坊虚拟机种的面向对象的编程语言,很多时候我们需要使用区块链系统本身的一些数据。而调用这些数据的一些对象,就是区块链系统提供的内建对象,属于全局命名空间,也不需要声明,直接使用即可。
常用的内建对象
主要是block(区块信息类)、msg(合约调用的所传递的信息)、tx(交易信息)这三大类的内建对象调用。
内建对象--block
区块信息是区块链系统的特点属性。
//block 内建对象
blockhash:查询区块hash,(无法使用此函数查询当前区块以及150个区块之前的区块hash)
block.timetamp:当前区块时间戳
block.coinbase:当前区块矿工地址
block.diffculty:当前块的挖矿难度系数
block.gaslimit:当前区块gas上限
block.number:当前区块编号
- 代码示例
//申明一个函数,返回上一区块哈希
function getHash() public view returns(bytes32){
// block.number获取本区块号,blockhash获取区块hash值
hash=blockhash(block.number-1);
return hash
}
内建对象--msg
msg是合约被调用时传递过来的消息的内建对象类
//msg 内建对象
msg.data:完整的calldata
msg.gas:剩余的gas量
msg.sender:消息的发送方(调用者),经常使用到,需要强记
msg.sig:函数标识符,返回calldata的前四个字节
msg.value:发送的消息中wei的数量
- 代码示例
//记录合约主持人
//一个合约只能使用一个constructor
constructor () {
// 我们将内建对象msg.sender赋值给owner,随着操作对象的改变而改变
owner = msg.sender;
}
内建对象--tx
tx是交易信息的内建对象类
tx.gasprice:交易的gas价格
tx.origin:交易发送方
智能合约中的货币单位
以太坊的智能合约中一共有四个货币单位,从小到大分别为:wei、gwei、finney、ether。
//换算关系
1 ether=1000 finney
1 finney=1000,000 gwei
1 gwei = 1000,000,000wei
在以太坊钱包中,一般是使用ether为官方单位,wei和finney是为了纪念密码学家Wei Dai和Hal Finney,这应该是区块链技术大多数是基于这些伟大的密码学家而建立的吧!!!