【转载】solidity智能合约[5]——一笔交易详解


#1

在之前,我们已经写好了一个最简单的helloworld合约,如下:

pragma solidity ^0.4.23;
contract HelloWorld{
    string public name = "jonson";

    function getName() public view returns(string){
        return name;
    }

    function changeName(string _name) public{
        name = _name;

    }

    function testPure(uint a,uint b) public pure returns(uint){
        return a+b;
    }
}

和pure和view不同,当我们执行changeName方法时,会发现,我们需要消耗gas。这笔事务会发送给全网所有的节点。全网所有的节点都会执行同样的操作。
当我们调用函数会在remix控制台中显示一些信息。

一笔交易的信息详解:

控制台信息

其中:
1、statues:代表当前交易状态,是否提交到区块链中成功。
2、transation hash:唯一标识此交易。
3、from:调用者地址。
4、to:合约地址
5、gas:此交易gas的最大限制
6、transation cost:此交易花费的总gas的大小。包含了excution cost。例如一笔交易基本的cost为21000gas。部署合约最小的成本为32000gas
7、excution cost:交易的执行成本。特指在以太坊虚拟机中运行的成本。
8、hash:同transation hash。
9、input 调用函数、传递进以太坊虚拟机中的二进制代码。
10、decode input 构造函数输入。
11、函数返回值
12、log 事件信息存储在其中
13、value 交易附带的以太币。

input详解

对于此例来说,如果我调用changeName传递的参数为"olaya",那么input中的信息为:

input

1、0x5353a2d8前4个字节,是函数声明hash后的前4个字节,用于查找到函数的位置。
2、0000000000000000000000000000000000000000000000000000000000000020第一个参数的偏移量,0x20是10进制的32,代表olaya这个参数偏移了32个字节。
3、0000000000000000000000000000000000000000000000000000000000000005string是特殊的动态长度数组,前面需要有长度来标示占了几个字节,扩充到32个字节。
4、6f6c617961000000000000000000000000000000000000000000000000000000olaya16进制标示,扩充到32个字节。。

参考资料:
transation cost and excution cost

  • 本文链接: <https ://dreamerjonson.com/2018/11/09/solidity-5/>
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!