关于智能合约:智能合约编写高级篇二区块哈希介绍
本文档从区块哈希基本概念登程,具体介绍了中移链的区块哈希交易接口和利用方向。实用于EOS区块链智能合约高级开发人员,相熟如何获取以后产生交易所在的区块号和区块哈希前缀,并通过Tapos机制验证交易的有效性。 01概述(一)哈希算法 哈希算法是能够将任意长度的二进制数据映射为固定长度二进制数据(哈希值)的一种算法。在这个过程中,哈希函数将输出数据通过一系列的简单运算变换成固定长度的输入,这个值等同于存放数据的地址,这个地址外面再将输出的数据进行存储,所以哈希函数能够将互联网上的数据以固定长度字符串的模式来保留。同时,哈希函数能够用于密码学、数据完整性验证、信息指纹等畛域,常见的哈希算法有MD5、SHA-1、SHA-256等。 (二)区块哈希 区块哈希是通过哈希算法对区块中的所有数据进行计算得出的固定长度的字符串。具体来说,区块哈希是指在区块链技术中,对于每一个新生产的区块,会给这个区块计算一个固定长度的哈希值,这个哈希值蕴含了这个区块中所有的数据,包含交易记录、上一个区块的哈希值、工夫戳等,并且只有这些数据有任何一点扭转,那么这个区块的哈希值就会发生变化,所以它在保障网络安全性、避免篡改和验证数据完整性方面起着十分重要的作用。 (三)区块哈希的特点 区块哈希的存在保障了区块链的数据安全性,任何篡改数据的行为都会被立刻发现,同时它也具备以下特点: 唯一性:每个区块哈希值都是惟一的,即便是区块链上有极其渺小的一点数据扭转,也会导致哈希值的变动。这保障了数据的不可变性和惟一标识性。 不可逆性:区块哈希函数是一个单向函数,能够将任意长度的数据转换为固定长度的哈希值。对于哈希值无奈进行反向计算推导复原原始数据,这保障了数据的安全性。 不可篡改性:如果输出数据产生了任何扭转,计算失去的哈希值都会发生变化。 02环境依赖eosio_2.1.0-1 eosio.cdt v1.8.x 03区块哈希接口与区块哈希相干的交易接口别离有tapos_block_num()和tapos_block_prefix(),它们用于生成区块哈希及验证交易执行的前提条件,这有助于确保交易的有效性和安全性,并提供区块链的相干信息以反对智能合约的开发。 (一)tapos_block_num() 它是一个用于获取以后交易所援用的区块号的函数,它返回一个无符号整数值,代表以后执行交易的区块高度。块高度示意以后执行的块在整个区块链上的地位,能够用于构建块摘要和验证交易。在交易处理过程中,每个块都有一个惟一的块高度。 源码形容 /** * Gets the block number used for TAPOS on the currently executing transaction. * * @ingroup transaction * @return block number used for TAPOS on the currently executing transaction * Example: * @code * int tbn = tapos_block_num(); * @endcode */ inline int tapos_block_num() { return internal_use_do_not_use::tapos_block_num(); }调用形式 #include <eosio/transaction.hpp>#include <eosio/eosio.hpp>uint16_t current_block_num = tapos_block_num(); // 获取用于以后执行交易所在的区块号(二)tapos_block_prefix() ...