solidity[5]——一笔交易详解

solidity[5]——一笔交易详解

 2018-11-09  智能合约 solidity语法  solidity, 以太坊, 智能合约  8  评论 字数统计: 490(字) 阅读时长: 1(分)

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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协议 许可协议。转载请注明出处!

 

郑建勋(jonson)区块链工程师 & Web工程师

灾难总是接踵而至,这正是世间的常理。你以为只要哭诉一下,就会有谁来救你吗?如果失败了,就只能说明我不过是如此程度的男人。

你可能感兴趣的:(以太坊)