当前位置:首页 » 以太坊知识 » 以太坊哈希查询

以太坊哈希查询

发布时间: 2023-02-18 19:14:12

以太坊交易记录在哪里查询

有自己的浏览器,以太坊和都是用的一个,而基于以太坊之上开发的代币也可以在以太坊的区块链浏览器上面查询,usdt在比特币区块链浏览器上面查询。
非小号上可以查看以太坊行情,但是并不能交易。想投资的话,可以去数字货币交易所,目前市场上主流的数字货币交易所有币安、火币网、比特网等。这里我们用以太坊区块链的钱包作为例子,小狐狸是加密钱包,以及进入区块链APP的出入口。进入之后获取钱包地址,再使用以太坊区块链的搜索器进入Etherscan官网首页后,就可以获取到以下区块链交易id信息:
所有者A利用他的私钥对前一次交易(比特货来源)和下一位所有者B签署一个数字签名,并将这个签名附加在这枚货币的末尾,制作出交易单。此时,B是以公钥作为接收方地址。A将交易单广播至全网,比特币就发送给了B,每个节点都将收到交易信息纳入一个区块中对B而言,该枚比特币会即时显示在比特币钱包中,但直到区块确认成功后才可以使用。目前一笔比特币从支付到最终确认成功,得到6个区块确认之后才能真正的确认到账。每个节点通过解一道数学难题,从而去获得创建新区块的权利,并争取得到比特币的奖励(新比特币会在此过程中产生)。

② 以太坊链上数据查询工具: https://eth.tokenview.com/cn

etherscan.io目前在国内无法访问,现在向大家推荐这个以太坊数据查询工具, https://eth.tokenview.com/cn ,数据来自他们自己的以太坊节点,数据同步速度快。

四个优势:

数据支持以太坊上的区块信息,地址余额,转账交易,以太坊所有Token,基于以太坊发行的稳定币。

链上存储的数据(inputdata)可以解码成普通语言,我们可以查看在以太坊上的留言。

几十种链上数据图表,同时有为高级数据分析师提供的Metrics模块。

由中国团队Tokenview开发,在国内可高速访问。

③ 以太坊event log查询与解析

从 ethereum json-rpc文档 的文档中找到一个同时指定多个事件以 OR 或者 AND 查询的方法.以下是查询 Approval 或 Transfer 事件的方法:

topics 字段中指定查询条件的语法参考上面链接。

通过 getTransactionReceipt 在ropsten测试网上查询到交易号为 的交易详情

这个交易从 "from": "" 发送到合约地址 "to": "" .这个合约为ERC20代币合约.从 topics 的第一个元素可以看出合约中产生了 Transfer 事件(topics第一个元素一定是事件的keccak哈希). topics 的第二个字段是转出代币的地址,第三个字段是接收者地址.ERC20代币 Transfer 事件的签名为

我们注意到 Transfer 事件的第一个和第二个参数被标记为 indexed , 因此他们的值被放在 topics array 中. 由于tokens参数没有标记为 indexed , 所以他的值被放在 data 字段. 如果事件中有多个字段未标记为 indexed , 那么他们的值都会被记录在 data 字段中。

④ 用Go来做以太坊开发④智能合约

在这个章节中我们会介绍如何用Go来编译,部署,写入和读取智能合约。

与智能合约交互,我们要先生成相应智能合约的应用二进制接口ABI(application binary interface),并把ABI编译成我们可以在Go应用中调用的格式。

第一步是安装 Solidity编译器 ( solc ).

Solc 在Ubuntu上有snapcraft包。

Solc在macOS上有Homebrew的包。

其他的平台或者从源码编译的教程请查阅官方solidity文档 install guide .

我们还得安装一个叫 abigen 的工具,来从solidity智能合约生成ABI。

假设您已经在计算机上设置了Go,只需运行以下命令即可安装 abigen 工具。

我们将创建一个简单的智能合约来测试。 学习更复杂的智能合约,或者智能合约的开发的内容则超出了本书的范围。 我强烈建议您查看 truffle framework 来学习开发和测试智能合约。

这里只是一个简单的合约,就是一个键/值存储,只有一个外部方法来设置任何人的键/值对。 我们还在设置值后添加了要发出的事件。

虽然这个智能合约很简单,但它将适用于这个例子。

现在我们可以从一个solidity文件生成ABI。

它会将其写入名为“Store_sol_Store.abi”的文件中

现在让我们用 abigen 将ABI转换为我们可以导入的Go文件。 这个新文件将包含我们可以用来与Go应用程序中的智能合约进行交互的所有可用方法。

为了从Go部署智能合约,我们还需要将solidity智能合约编译为EVM字节码。 EVM字节码将在事务的数据字段中发送。 在Go文件上生成部署方法需要bin文件。

现在我们编译Go合约文件,其中包括deploy方法,因为我们包含了bin文件。

在接下来的课程中,我们将学习如何部署智能合约,然后与之交互。

Commands

Store.sol

solc version used for these examples

如果你还没看之前的章节,请先学习 编译智能合约的章节 因为这节内容,需要先了解如何将智能合约编译为Go文件。

假设你已经导入从 abigen 生成的新创建的Go包文件,并设置ethclient,加载您的私钥,下一步是创建一个有配置密匙的交易发送器(tansactor)。 首先从go-ethereum导入 accounts/abi/bind 包,然后调用传入私钥的 NewKeyedTransactor 。 然后设置通常的属性,如nonce,燃气价格,燃气上线限制和ETH值。

如果你还记得上个章节的内容, 我们创建了一个非常简单的“Store”合约,用于设置和存储键/值对。 生成的Go合约文件提供了部署方法。 部署方法名称始终以单词 Deploy 开头,后跟合约名称,在本例中为 Store 。

deploy函数接受有密匙的事务处理器,ethclient,以及智能合约构造函数可能接受的任何输入参数。我们测试的智能合约接受一个版本号的字符串参数。 此函数将返回新部署的合约地址,事务对象,我们可以交互的合约实例,还有错误(如果有)。

就这么简单:)你可以用事务哈希来在Etherscan上查询合约的部署状态: https://rinkeby.etherscan.io/tx/

Commands

Store.sol

contract_deploy.go

solc version used for these examples

这写章节需要了解如何将智能合约的ABI编译成Go的合约文件。如果你还没看, 前先读 上一个章节 。

一旦使用 abigen 工具将智能合约的ABI编译为Go包,下一步就是调用“New”方法,其格式为“New<contractname style="box-sizing: border-box; font-size: 16px; -ms-text-size-adjust: auto; -webkit-tap-highlight-color: transparent;">”,所以在我们的例子中如果你 回想一下它将是 NewStore 。 此初始化方法接收智能合约的地址,并返回可以开始与之交互的合约实例。</contractname>

Commands

Store.sol

contract_load.go

solc version used for these examples

这写章节需要了解如何将智能合约的ABI编译成Go的合约文件。如果你还没看, 前先读 上一个章节 。

在上个章节我们学习了如何在Go应用程序中初始化合约实例。 现在我们将使用新合约实例提供的方法来阅读智能合约。 如果你还记得我们在部署过程中设置的合约中有一个名为 version 的全局变量。 因为它是公开的,这意味着它们将成为我们自动创建的getter函数。 常量和view函数也接受 bind.CallOpts 作为第一个参数。了解可用的具体选项要看相应类的 文档 一般情况下我们可以用 nil 。

Commands

Store.sol

contract_read.go

solc version used for these examples

这写章节需要了解如何将智能合约的ABI编译成Go的合约文件。如果你还没看, 前先读 上一个章节 。

写入智能合约需要我们用私钥来对交易事务进行签名。

我们还需要先查到nonce和燃气价格。

接下来,我们创建一个新的keyed transactor,它接收私钥。

然后我们需要设置keyed transactor的标准交易选项。

现在我们加载一个智能合约的实例。如果你还记得 上个章节 我们创建一个名为 Store 的合约,并使用 abigen 工具生成一个Go文件。 要初始化它,我们只需调用合约包的 New 方法,并提供智能合约地址和ethclient,它返回我们可以使用的合约实例。

我们创建的智能合约有一个名为 SetItem 的外部方法,它接受solidity“bytes32”格式的两个参数(key,value)。 这意味着Go合约包要求我们传递一个长度为32个字节的字节数组。 调用 SetItem 方法需要我们传递我们之前创建的 auth 对象(keyed transactor)。 在幕后,此方法将使用它的参数对此函数调用进行编码,将其设置为事务的 data 属性,并使用私钥对其进行签名。 结果将是一个已签名的事务对象。

现在我就可以看到交易已经成功被发送到了以太坊网络了: https://rinkeby.etherscan.io/tx/

要验证键/值是否已设置,我们可以读取智能合约中的值。

搞定!

Commands

Store.sol

contract_write.go

solc version used for these examples

有时您需要读取已部署的智能合约的字节码。 由于所有智能合约字节码都存在于区块链中,因此我们可以轻松获取它。

首先设置客户端和要读取的字节码的智能合约地址。

现在你需要调用客户端的 codeAt 方法。 codeAt 方法接受智能合约地址和可选的块编号,并以字节格式返回字节码。

你也可以在etherscan上查询16进制格式的字节码 https://rinkeby.etherscan.io/address/#code

contract_bytecode.go

首先创建一个ERC20智能合约interface。 这只是与您可以调用的函数的函数定义的契约。

然后将interface智能合约编译为JSON ABI,并使用 abigen 从ABI创建Go包。

假设我们已经像往常一样设置了以太坊客户端,我们现在可以将新的 token 包导入我们的应用程序并实例化它。这个例子里我们用 Golem 代币的地址.

我们现在可以调用任何ERC20的方法。 例如,我们可以查询用户的代币余额。

我们还可以读ERC20智能合约的公共变量。

我们可以做一些简单的数学运算将余额转换为可读的十进制格式。

同样的信息也可以在etherscan上查询: https://etherscan.io/token/?a=

Commands

erc20.sol

contract_read_erc20.go

solc version used for these examples

⑤ 怎么样在以太坊上查询区块链币

可以输入钱包地址、交易ID、区块哈希或者区块高度等信息直接查询,非常方便。
如果是查询账户余额、账户的历史交易数据等信息,建议直接输入钱包地址查询;如果是查询某笔转账的相关信息,比如是否到账、进展如何,输入交易ID是最方便的。
当然了,区块链浏览器不仅可以查询自己的账户,也可以查询别人的账户以及相关的交易信息,包括比特币创始人中本聪的账户。

⑥ 追踪和管理数字资产新姿势,教你学会查看区块链账单

账单记录价值流通和状态,是金融服务的基础功能。

我们常用的银行、支付宝、微信支付等都会为普通用户和商家记录一笔交易,提供不同维度的查询、统计和分析服务。

比如大家爱晒的支付宝年度账单,会统计用户全年的总收支、消费种类、余额宝和其他理财收益、点外卖的次数等。通过大数据技术,展示各个地域,不同年龄段的消费兴趣和趋势,让消费者更了解自己周边的消费环境,商家能够及时把握市场需求。

去中心化的区块链网络里,交易被永久的记录在链上,公开透明,人人可查。

但是由于区块链的设计更倾向于保证不可篡改和数据压缩需求,导致业务层面的过滤查询功能缺失。 加上不同链的规则不同,追踪和管理加密资产变的异常困难。这也是为什么数字资产投资者常常感叹“总觉得帐没算明白“的原因所在。

SixPencer推出全新区块链记账神器,目前已支持比特币(Bitcoin)和以太坊(Ethereum)底层的资产追踪和管理,免费使用,无需注册。

一经推出,受到了包括矿工、资管机构、OTC商户、加密创业公司、数字资产投资者的喜爱。



作为专业的资管工具,不仅能够查询所有链上交易记录,实时查看账户余额和持有资产,而且 提供每日各币种收支情况、支持单或多地址聚合收支统计、地址画像分析和图表、大额交易记录排行、联系人管理等。

进入网站后, 在首页搜索框,输入比特币或以太坊地址 点击搜索即可进入该地址的总览页面。

我们以目前ETH持有量全网排名第一的地址: (标签:bitfinex 1) 账户作为demo账户进行演示,所有数据均为真实链上数据。


这里简单介绍下区块链上的地址和银行账户的区别。 在区块链上,地址就类似于银行卡号,知道地址就等于知道银行卡号一样,可以向其转账。


但不同的是, 区块链是不可篡改的分布式公开账本,通常具有匿名性,任何人可以对任何地址进行公开查询。 银行账户只能查询本人的账户信息,无法通过银行卡号得知其他人的账户信息。

如果用户有多个地址,或者想追踪其他地址,均可以通过搜索, 所有搜索过的地址信息会在资产组合页面进行汇总,点击下拉框即可切换或者删除账户。

SixPencer除包含区块链浏览器提供的基础信息外,添加展示了一些个性化的指标,帮助用户了解自己的链上画像,也可以追踪其他账户的链上轨迹。在下面总览页面可以查看地址的资产概览、历史指标、收支统计、持有资产信息。

地址概览

创建时间:第一次收到ETH的日期

净资产:所有资产,包含ERC20 token资产的合计美元价值

ETH排行:持有ETH数量在所有以太坊地址中的排名

ETH余额和估值:持有的ETH数量和其对应的美元价值

历史指标

历史指标展示交易量、交易次数、代币分析和联系人分析四大维度。 通过统计,算不清的糊涂账终于能算清了,比如最简单的会计计算,ETH总收入=ETH余额+ETH总支出+ETH总手续费。 再比如总交易次数=转入交易次数+转出交易次数。

由于以太坊网络的特殊性,所有转账的手续费都是以ETH支付。因此我们将手续费单独罗列出来,在交易明细中也支持手续费单独筛选,帮助用户统计手续费支出。


一些有趣的数据,demo账户手续费支出为1.1556ETH,ETH单笔大额转账达90万个ETH,持有代币数量有350种,交易次数最多的代币是USDT,与其交易过的地址仅37个。

一般持有上百种不同资产的地址通常都是交易所地址,加上交易次数和联系人并不多,可以排除是对外地址,基本可以判断是bitfinex交易所内部使用地址。


收支情况

统计了本月全部资产合计收入和支出,支出包含手续费支出。

持有资产情况

展示持有的资产数量、价值、资产价格和24h涨跌幅。demo账户这类交易所的地址,持有资产通常10页都放不下。

SixPencer除了提供地址的交易流水外,还支持全历史交易记录查询和筛选、余额信息、日收支统计等。

交易明细

从下面页面可以清晰得知ETH资产的本月收支情况 ,用户还可以根据日期,资金流向、交易分类和标签系统进行筛选,根据自身需求进行更细致的统计,后面会介绍如何进行指定地址的交易筛选。

点击上图中的ETH下拉框,可以切换到其他币种的交易详情页面 ,比如切换到USDT的交易详情查看USDT的明细状况。

除月账单外,SixPencer展示每笔交易的交易明细,提供交易方向、交易对手方、交易金额、账户余额、交易时间、每日收支情况等信息。 下图可以看到近6笔ETH交易均为从bitfinex 3 账户转入bitfinex 1的交易。

交易详情

点击任意一笔交易明细,即可进入该笔交易的交易详情页。 交易哈希是每笔链上转账都有的唯一不可篡改的交易ID,类似于订单号的概念。

通过交易哈希就可以查询到一笔交易的具体信息。

下面所展示的交易数量、交易状态、交易时间、发送和接受方、手续费等都是这笔交易的具体信息,在这里不再赘述。 值得注意的是,SixPencer提供个人标签和备注系统,用户可以对单笔交易,进行个性化分类和备注, 帮助记忆,不遗忘每一笔交易。

如何快速找到和指定地址的交易信息?

时间变久,交易变多后,查询链上指定交易信息就变得异常复杂和困难,SixPencer将交易信息按照业务需求进行细化,并提供标签系统辅助用户进行自定义交易查询和统计。

比如想要查询2020年6月地址(标签:bitfinex 3)一共向demo账户转入了多少ETH。通过我们的账单系统,仅需两步操作即可查询。

1、打标签: 为了演示,我们将“bitfinex 3“这个标签重命名为“测试test”。

2、筛选: 将日期筛选为6月1日-6月30日,在筛选栏 选中“转入”,并在最下面的标签栏选中“测试test”,点击保存。

保存后即可搜索出所有6月“测试test”转入到demo账户的交易信息,从下图可以看出6月份,demo账户共从标签为“测试test“的地址收到58,440.2489个ETH。

如果用户想查询和多个指定地址的交易,选中多个标签后,调整日期、资金流向等信息即可进行资产的自动统计。

在分析一栏,用户可以查询地址不同维度的图表分析信息,包含余额、交易、分类和排行四大维度。 分别点击各维度还能够查看更多详细数据和图表。

余额:余额展示资产的余额数量和价值走势

交易:交易展示全部交易、转入和转出的交易数量、交易数量价值和交易次数走势

分类:分类根据平台地址标签系统对交易类型进行统计,反应地址的交易偏好

排行:排行按照交易次数展示活跃联系人,按照交易金额展示大额交易

比如排行分析,能够很快查看与某个地址的具体交易金额和大额转账情况。如下图,demo账户与标签为“测试test” 的地址在本月一共交易了177次,其他与demo账户交易较多的都是ERC20 Token合约调用交易。

从下图看,大额排行也都是与标签为“测试test”的地址交易信息,表格展示交易对象、交易时间、交易方向、交易数量和价值。 对交易所大户感兴趣的,可以查询交易所地址的大额转账信息,看看哪些地址都是充提大户。

通讯录展示所有和demo账户有过交易记录的地址,除平台自带的标签体系外,用户可以对地址添加标签或者重命名标签。

标签:展示平台标签系统已知标签和用户自行添加的标签

最近联系人:展示最近30天有过交易记录的地址/标签

全部联系人:展示所有有过交易记录的联系人地址/标签,交易数量超过1万笔的地址,取最近1万笔交易的联系人展示

综上,SixPencer的全新资产追踪和管理工具能够提供比区块链浏览器或者钱包更综合的查询和分析功能, 作为一款工具产品意在辅助用户进行数字资产管理,通过对链上用户画像的进一步解析,帮助大家更好的决策。

我们认为区块链的公开透明机制应该让数据查询更简单,但目前按照实际业务需求快速查询区块链数据仍然是难点痛点,并成为商业落地的一大阻碍。

数字资产交易仅仅是其中一小块,未来还将有大量有价值的数据存储在区块链上,SixPencer将继续推出更多实用工具,让数据更好为业务服务。


⑦ 是不是以太链的代币怎么查

如何查询以太链新币(以太坊提币查询)
1.
有自己的浏览器,以太坊和都是用的一个,而基于以太坊之上开发的代币也可以在以太坊的区块链浏览器上面查询,usdt在比特币区块链浏览器上面查询。
2.
非小号上可以查看以太坊行情,但是并不能交易。
3.
可以输入钱包地址、交易ID、区块哈希或者区块高度等信息直接查询,非常方便。
4.
并且,以***为例,ERC-USDT的最小提币限额(2USDT)目前是小于Omni

⑧ 以太坊技术系列-以太坊数据结构

本篇文章和大家介绍一下以太坊的数据结构,上篇文章我们提到,以太坊为了实现智能合约这一功能,使用了基于账户的模型。我们来看看以太坊中数据结构。

既然是基于账户的模型,我们需要通过账户地址找到账户的状态。就像通过银行卡号可以找到你在银行中的各种信息一样。最简单的想法当然是一个简单的哈希表 key是账户地址 value是账户状态。但这里有个问题解决不了。

轻节点如何校验账户合法性?

上篇我们说过,区块链中有2类节点,全节点和轻节点,轻节点只会存储block header,所以轻节点如何才能校验账号是否合法呢?

这个思路和我们平时用的md5校验一致,我们会对区块内的信息进行hash运算从而得出区块内信息唯一确定的值,区块链所有节点中这个值都是相同的。

在这个过程中我们用到了一种数据结构Merkle Tree(哈希树),我们先看下Merkle Tree(哈希树)的示意图。

上篇文章说到区块链中的链表(哈希链)和我们平时常见链表不同的是将指针从地址改为了hash指,这里也一样,哈希树和二叉树的区别有2个

1.将地址改为了哈希值

2.只有叶子节点存储数据

回到之前的问题轻节点是如何校验1个账户或交易是否是在链上的呢?

整个流程如上图所示

1.轻节点需要判断1个账号是否合法

2.轻节点由于只存储block header,所以拿到1个账号的时候会向全节点发出请求

3.全节点存储了所有账户状态,将账户路径中的需要计算用到的hash值返回给轻节点

4.轻节点本地进行计算根hash值,如果计算结果和自己存储一致则账户合法,不一致则不合法。

那以太坊中的账户信息的数据结构就是这样吗?

直接用这样的数据结构来存储账户信息会有2个问题

查找困难

生成hash值不确定

第1个问题应该比较容易发现,在这个树中寻找1个账号需要的复杂度是O(n),因为没有任何顺序。

第2个问题其实也是因为无序导致的,无序的组合每个节点针对同一批账户生成的hash值不一致,这就导致无法达成共识。

既然2个问题都和顺序有关,那我们类似二叉排序树一样,使用哈希排序树是不是就可以解决问题了呢?

使用排序树后会带来另外1个问题

插入困难

因为要维持树是有序的,很可能带来树结构的很大变动。

以太坊中使用了另外一种数据结构字典树。和哈希树不同,字典树应该是很多地方都有使用。我们简单来看下字典树的结构。

字典树能够较好地解决哈希树的2个缺点1.查找困难 2.生成的hash值不确定以及排序二叉树的1个缺点 插入困难。

但字典树我们可以看到可能树的深度可能由于部分元素导致整棵树深度非常深。

这时我们可以进一步优化,将相同路径进行压缩。这就是压缩字典树。

将哈希树和压缩字典树结合,就可以得到以太坊存储账户的最终数据结构-MPT。

将压缩字典树里面的指针从地址改为指针,并且将数据存储在叶子节点中即可。

介绍完状态树的数据结构,我们接下来讨论1个问题,区块中存储的账户状态是什么样的范围。有2种选择。

只保存当时区块中产生交易的账户状态。

保存全局所有的账户。

我们可以看下这2种方式,无非就是空间和时间的平衡,只保存当前区块产生的交易意味着是做懒加载(需要的时候才去寻找账户),在区块链中这个代价是非常大的,因为寻找的账户之前从未交易过,这样会遍历整个区块链。另外一种保存全局的账户方式虽然看起来空间消耗较大,但查找快捷,而且空间的问题我们可以通过其他方式优化。所以最终以太坊选择了第2种每个区块都报错全局所有账户的方式。

我们来看下以太坊中是如何保存状态树的。

可以看到以太坊中虽然每个区块都保存了全部账户,但是会将未发生变化的账户状态指向前1个节点,本身只存储发生变化的状态,这样可以较大程度优化空间占用。

介绍完以太坊中比较复杂的状态树后,我们继续来看看以太坊中的另外两棵树,交易树和收据树。

首先介绍一下,为什么需要交易树&收据树。

1.交易树

虽然以太坊是基于账户的模型,但是就像银行不仅会存储银行卡的余额,还会存储卡中的每笔钱怎么来的以及怎么花的。交易树中就存储着当前区块中的包含的所有交易。

2.收据树

由于智能合约的引入增加了不少复杂性,所以以太坊用收据树存储着一些交易操作的额外信息。比如交易过程中执行日志就包含在收据树中方便查询。收据树和交易树是一一对应的。每发生一次交易就会有一次收据。

和状态树不同交易树和收据树只维护当前区块内发生的交易,因为当时区块发生交易时不需要再去查找另外1个交易,也就之前需要可能遍历整个区块链的查找操作了。

由于以太坊中的出块速度较快,我们进行一些查询一些符合条件交易的时候会面临大量数据遍历困难的问题。收据树中引入了布隆过滤器可以帮助我们有效缓解这一困难。

布隆过滤器将大集合中每个元素进行hash运算映射到1个较小的集合,这时再来1个元素要判断是否在大集合的时候,不需要遍历整个大集合,而是去进行hash运算去小集合中寻找是否存在,如果不存在,肯定不在大集合中,如果存在则不能说明任何问题。

如上图所示,布隆过滤器只能证明某1个元素不在集合中,不能证明1个元素在结合中。

以太坊中如果我们要在较多区块中寻找某1个交易,则可以利用布隆过滤器,过滤掉肯定不存在目标交易的区块,然后进入收据树内继续利用布隆过滤器筛选,剩下的才是可能的目标交易的交易,进行一一比对即可。

我们介绍了以太坊的核心数据结构,状态树&交易树&收据树,他们都是使用相同的数据结构-哈希压缩字典树。但状态树是维护1颗全局账户树,交易树和收据树则是维护本区块内的交易或收据。

介绍完数据结构后,后面我们会用几篇文章来介绍以太坊中的一些核心算法,比如共识机制,挖矿算法等。

⑨ 以太坊的ABI编码

ABI全称Application Binary Interface, 是调用智能合约函数以及合约之间函数调用的消息编码格式定义,也可以理解为智能合约函数调用的接口说明. 类似Webservice里的SOAP协议一样;也就是定义操作函数签名,参数编码,返回结果编码等。

使用ABI协议时必须要求在编译时知道类型,即强类型相关.

当一个智能合约编译出来后, 他的abi接口定义就确定了. 比如下面的智能合约:

生成的字节码:

生成的abi定义:

可以看出, 生成abi包含了2个定义: 函数 lotus , 事件 Log_lotus , 各个字段含义见上. 根据该abi定义,就可以生成调用该智能合约函数的abi格式的数据了.

格式简单的可以表示为: 函数选择器+参数编码

一个函数调用的前四个字节数据指定了要调用的函数签名。计算方式是使用函数签名的 keccak256 的哈希,取4个字节。

函数名如果有多个参数使用,隔开,要去掉表达式中的所有空格。在geth客户端,通过命令可以得到hash:

由于前面的函数签名使用了四个字节,参数的数据将从第五个字节开始。

根据参数类型,编码规则有所区别:

除了bytes,和string, 其他类型的数据不足32字节长度的需要加0补足32字节. 动态长度的编码在例子中介绍.

函数: function baz(uint32 x, bool y) :

调用: baz(69, true)

生成的数据如下:

返回结果是一个bool值,在这里,返回的是false:

函数: f(uint,uint32[],bytes10,bytes)

调用: (0x123, [0x456, 0x789], "1234567890", "Hello, world!")

函数选择器: bytes4(sha3("f(uint256,uint32[],bytes10,bytes)"))

对于 固定大小的类型 值 uint256 和 bytes10 ,直接编码值。

对于 动态内容类型 值 uint32[] 和 bytes ,我们先 编码偏移值 ,偏移值是整个值编码的开始到真正存这个数据的偏移值(这里不计算头四个用于表示函数签名的字节)。

所以参数编码数据依次为:

尾部部分的第一个动态参数, [0x456, 0x789] 编码拆解如下:

最后我们来看看第二个动态参数的的编码, Hello, world! 。

所以最终结果是:

⑩ 以太坊浏览器查到的真实吗

真实。
可以输入交易哈希值、以太坊地址、基于以太坊token的名字等查询详细信息。
以太坊区块浏览器查到的真实,在以太坊区块浏览器的搜索框可以查询到交易状态、token详细情况等,区块高度显示的是最新出块的区块信息,包括出块时间和出块的矿池。最新交易记录显示的是以太坊网络上的最新交易信息。

热点内容
比特币未来会归零 发布:2024-11-19 00:24:33 浏览:993
魔力宝贝手游挖矿转 发布:2024-11-19 00:23:40 浏览:499
区块链的特征不包括 发布:2024-11-19 00:14:11 浏览:861
币圈网一个账号能互转币吗 发布:2024-11-19 00:12:40 浏览:686
我的世界怎么加载一键挖矿 发布:2024-11-18 23:58:31 浏览:929
区块链初期项目 发布:2024-11-18 23:37:49 浏览:854
比特币日交易限制 发布:2024-11-18 23:36:14 浏览:171
usdt怎么提现到btc钱包 发布:2024-11-18 23:30:40 浏览:758
币圈图表是什么意思 发布:2024-11-18 23:30:33 浏览:785
区块链电信认证 发布:2024-11-18 23:29:29 浏览:341