木星链 木星链
Ctrl+D收藏木星链
首页 > FTX > 正文

REN:为什么要使用 transaction data?

作者:

时间:1900/1/1 0:00:00

可能你也注意到了,在跟智能合约交互时,你的事务会自动包含inputdata。在MyCrypto钱包界面,这些数据有个简单的标签:“Data”——它是做什么的呢?

这篇文章就是从技术上解释事务输入数据是怎么一回事,它实质是什么,又是怎么工作的。

-MyCrypto钱包的高级事务设定-

什么是InputData?

我们先来看看这笔token转账交易。某个人发送了0ETH到?0xd26114cd6ee289accf82350c8d8487fedb8a0c07,而且Etherscan网站呈现了这是一笔意图发送0.19OMGtoken到这个地址的事务。那么,EVM究竟是怎么知道,这个人想要转账某个数额的token到另一地址的呢?

你再仔细看Etherscan,就能看到这笔事务带着inputdata。inputdata是发送者为这笔事务附加的额外数据,既可以是普通的文本,也可以是数字。但在这笔交易中,发送者使用这部分数据来“告诉”合约,让合约运行特定的函数。智能合约本身是由一系列函数组成的。举例而言,一个ERC-20token合约使用比如“transfer”来把token从A账户转移到B账户,使用“balancerOf”函数来获得某个地址的余额,等等。在我们研究的这笔交易中,你可以看到它调用了?transfer(address_to,uint256_value)?函数。

数据:3年内币安增持约42万枚BTC,Coinbase减持近56万枚BTC:6月5日消息,据Glassnode监测,在评估过去3年前3大交易所持有的比特币总量时,发现币安和Bitfinex的比特币总量分别增长了421000枚BTC和250000枚BTC,而Coinbase则减少了558000枚BTC。目前币安、Coinbase和Bitfinex分别持有70.3万枚、46.2万枚、32万枚BTC。[2023/6/5 21:16:00]

这笔事务的输入数据为0xa9059cbb0000000000000000000000004bbeeb066ed09b7aed07bf39eee0460dfa26152000000000000000000000000000000000000000000000000002a34892d36d6c74。你可以把这一长串的?十六进制?数据分解一下。开头的0x表示这是一个十六进制数值,紧接着的8个字节是函数标识符,再然后就全部是以32字节为一组的函数参数。所以第一组是?0000000000000000000000004bbeeb066ed09b7aed07bf39eee0460dfa261520?而第二组是?000000000000000000000000000000000000000000000000002a34892d36d6c74。

VitaDAO完成410万美元融资,辉瑞风投部门Pfizer Ventures等参投:1月30日消息,去中心化自治组织VitaDAO完成410万美元融资,辉瑞的风投部门Pfizer Ventures、Shine Capital、L1 Digital、Balaji Srinivasan等参投。

这是辉瑞在web3领域的第一笔投资,该公司通过特殊目的工具持有Vita治理代币,甚至参与了治理提案。该轮融资的消息是在辉瑞先前宣布向VitaDAO提供500,000美元的承诺之后发布的。

VitaDAO资助的项目主要关注长寿和衰老过程,支持了生产mRNA药物的斯坦福大学分拆公司 Turn Biotechnologies,以及哥本哈根大学一项关于了解药物对衰老过程影响的研究。

VitaDAO旨在利用这笔资金进一步资助长寿研究项目和将于明年从DAO中剥离出来的生物技术初创公司。(TheBlock)[2023/1/30 11:36:40]

-InputData分解-

如果你在Etherscan上查看这些数据,你会看到它以下文这个形式呈现

十六进制是啥?

十六进制是一种计数系统,就像十进制和二进制一样;十六进制使用数字0到9和字母A到F,来对应表示十进制的0到15。下面这种图展现的就是这样的对应关系。十六进制常常用来更直观地表示大数字。

Circle CEO:2023年将出现另一场类似FTX的破产:金色财经报道,Circle 首席执行官 Jeremy Allaire 周二表示,随着公司在早期继续苦苦挣扎,加密货币市场将在 2023 年见证更多破产。然而,由于监管框架和规则的进步,他仍然对市场的技术发展以及 2023 年加密货币采用率的上升持乐观态度。[2023/1/17 11:16:51]

-十进制数字与对应的十六进制字符-

单个十六进制字符所能表示的最大数值是15,长度是4个比特。多个十六进制字符相连时,你要把每个字符的二进制表示前后拼接在一起,才能得到其十进制数值。举个例子,0x5C,可以写成0101(=5)和1100(=C),前后拼接就是01011100,这就是二进制形式的92,所以十六进制数0x5C的数值就是92。

大多数编程语言都使用前缀0x作为绝对标识符,将十六进制数与其他的计数类型区别开来。这个前缀本身没有任何意义,只是为了清晰。我们这篇文章也会采取一样的做法,十六进制数都用0x开头。

讲完这些,我们继续。如果你还是没能理解十六进制,也不用担心——对于理解inputdata来说不是必需的。

InputData与智能合约

InputData的首要用途就是与智能合约交互。大部分智能合约都使用?合约ABI规范,使得Etherscan这样的网站能自动解码inputdata并显示事务所调用的具体操作。在我们上面那个例子中,这是一笔有关代币合约的事务,而且代币合约遵循ERC-20标准。这也就意味着,我们都知晓所有可能调用的函数,以及它们的?签名。举例,用于ERC-20合约的transfer函数的完整签名总是?transfer(address,uint256),意味着这个函数需要两个参数,所传入的第一个参数会被解读为一个地址,第二个参数会被解读为一个未签名的256位的数字。

MakerDAO社区通过取消RENBTC-A金库的民意投票,12月7日后将启动清算程序:11月25日消息,MakerDAO发推称,MakerDAO治理部门通过取消RENBTC-A金库类型的民意投票,所有抵押率低于5000%的renBTC-A头寸将在12月7日投票确认后被清算。

Ren曾由Alameda与Ren前领导层合作收购,但由于Alameda的破产,Ren开发团队将禁用Ren 1.0铸造,并在30天后关闭Ren 1.0网络。根据风险核心小组的建议,禁用铸造意味着renBTC有可能脱钩,而禁用销毁意味着MakerDAO在有限时间内下架抵押品,以减少未来的潜在风险。MakerDAO治理部门批准一系列清算参数,在投票通过前,用户仍有机会避免清算。

据此前报道,11月21日,资产跨链协议Ren Protocol发推称,由于Ren 1.0网络将在30天内关闭,强烈建议用户尽快将其Ren资产(例如renBTC)桥接回原生链。Ren Protocol还表示,其目标是尽快推出完全由社区控制的网络Ren 2.0。

此前Ren表示,Alameda与Ren前领导层合作收购Ren,但由于Alameda破产,提供给Ren开发团队的资金仅持续到第四季度。目前Ren正在与投资者谈判以继续推动发展,并计划比预期更早地推出Ren 2.0。网站也将托管在IPFS上,并将控制权转移至RenDAO。[2022/11/25 12:34:37]

Solidity语言有多种参数类型。如果你有兴趣学习Solidity语言和智能合约,你可以在Solidity文档页面了解更多。

今年上半年韩国26个虚拟资产交易所的日均交易金额降至5.3万亿韩元:9月26日消息,根据韩国金融委员会下属金融信息分析院(FIU)发布的数据,2022年上半年韩国当地虚拟资产的市场价值为23万亿韩元(约37亿美元),与上年末(32.2万亿韩元)相比减少58%。日均交易额也下降,今年上半年韩国26个虚拟资产交易所的日均交易金额为5.3万亿韩元,比上年末减少53%,交易总额减少54%至951万亿韩元。(News1)[2022/9/26 7:21:25]

函数签名

如你所见,transfer函数的签名是?transfer(address,uint256),这个对所有ERC-20合约都是一样的。如果某个合约给转账函数安排不一样的参数类型,比如一个地址和一个uint128,这个合约就不是“ERC-20兼容”的。

要获得一个函数的签名的十六进制形式,我们先要获得这个函数的SHA-3哈希值的前面4个字节。而要想知道一个数据的Keccak-256哈希值,你可以使用JavaSceript语言的web3库,或者求助于这样的在线工具。在这个工具页面填入?transfer(address,uint256),它会显示?0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b?作为结果。取前8个字符,就是?a9059cbb,恰好跟上述事务的MethodID一致。

另一个例子:ERC-20标准合约的approve函数的函数签名是?approve(address,uint256),其SHA-3哈希值是?0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba,首8个字符是?095ea7b3,因此,调用许可函数的inputdata开头就会是0x095ea7b3。这笔发往DAItoken合约的事务就是如此。

地址和数量

每一个参数的长度都是32字节,或者说64个十六进制字符。但以太坊地址只有40个字节长。为了解决这个问题,地址参数要用0来填充。在十六进制里面,0x0000123和0x123是一样的,因此?0x0000000000000000000000004bbeeb066ed09b7aed07bf39eee0460dfa261520等同于?0x4bbeeb066ed09b7aed07bf39eee0460dfa261520,而且?0x00000000000000000000000000000000000000000000000002a34892d36d6c74?也就等于?0x2a34892d36d6c74。那为什么我们要填充这些0呢?

就像我们上面说到的,Solidity合约可以接受的最大数值是2256?-1,刚好是32字节。使用固定的长度可以让EVM和其他应用在解码数据时候更轻松,因为你可以假设每一个参数的长度都是一样的。

那数组和字符串呢?

如上所述,在inputdata中使用数组和字符串,情形会有些许不同。因为数组本质是多个东西组成的一个列表。举个例子,1、2、3三个数所组成的列表在大多数编程语言中都可以写为。要在事务中发送这种数据,列表中的每一个对象都要作为32字节一组的数据发送,列在inputdata的结尾。指明数组长度的指针就作为参数。

假定我们有一个叫做?calledmyFunction?的函数,接收一个地址和数字的数组作为参数,即?myFunction(address,uint256)。该函数的函数签名是0x4b294170。地址这一项,我们照上面所说的操作。因为我们的数组包含3个对象,数组的长度用十六进制表示为0x3。然后每个对象都要占据恰好32自己的空间,且数组要放在所有其它参数之后,所以数组会从3232=64字节之后开始。

-例子:input数据要按照32字节一组来切分-

因为字符串的长度是任意的,它们要按32字节一组来切分,处理方式跟数组相同。

像Etherscan这样的网站是如何解码inputdata的?

哈希函数是单向函数,所以如果你只有函数签名的哈希值,是不可能会恢复出函数签名的。合约的所有者可以将合约的ABI作为JSON文件上传,就像这个例子,这可以用来拿到函数签名的哈希值。

即使合约的所有者不上传合约的ABI,也能够解码input数据。因为,ERC-20合约函数的签名都是一样的,因此Etherscan只需使用一个预定义的合约ABI即可服务大部分合约。举个例子,ERC20合约的转账函数的合约ABI如下文所示:

如果输入数据里的签名与任意一个预定义的函数相匹配,Etherscan都能解码inputdata。

inputdata的大小有没有什么限制?

既有,也没有。以太坊协议没有为inputdata的长度设固定的上限,但inputdata也消耗gas。单个区块可用的Gas数量是有上限的,在本文撰写时是800万。每一个0字节都要消耗4gas,而非零的字节要消耗68gas。一笔标准的ETH转账事务要消耗21000单位gas,所以,如果不考虑调用合约的交易,当前inputdata的最大长度是2MB,或者全部用非零字节的话,就是0.12MB。因为inputdata不会只有零,也不会一个0也没有,所以实际的大小会在两者之间。

如果你想看实时的区块Gas上限,可以看ETHStats.net。

-特定区块的Gas上限-

只需将鼠标停留在“GasLimit”部分的某个区块上,就可以看到其Gas上限。

更多信息

合约ABI规范

ERC-20Token标准

以太坊虚拟机

参考

以太坊黄皮书

Solidity文档

原文链接:

https://blog.mycrypto.com/why-do-we-need-transaction-data-/

作者:?MaartenZuidhoorn

翻译:?阿剑

标签:RENDATADATPUTVATRENIData Transaction TokenDATBOI币PutinCoin

FTX热门资讯
KEX:BKEX Global 关于Seed Incubator Pro AWO(AIWORK )申购结果的公告

尊敬的用户:BKEXGlobalSeedIncubatorProAWO申购已经结束,AWO已发放至有效参与申购用户的账户.

1900/1/1 0:00:00
LAYER:Layer 2 DAO:MetisDAO 研究报告

前言自从成熟的DeFi项目吸引大量资本入场后,DeFi生态繁荣,以太坊网络拥堵问题日趋严重,虽然2020年12月1日以太坊信标链启动,但距离真正实现以太坊2.0仍有较长的路要走.

1900/1/1 0:00:00
SHI:让千万人疯狂的shib背后的“屎”逻辑

市场中一直流传着一句话:“牛市始于绝望,在质疑中开始,在荒唐下结束。”在数字货币市场中应该没有比狗狗币与SHIB的火热更加荒唐的事情.

1900/1/1 0:00:00
HEX:BHEX关于前品牌名称霍比特和Hotbit交易所无关联声明的公告

尊敬的社区用户:BHEX郑重声明:BHEX前品牌名称霍比特与Hotbit交易所无任何关联。近期,Hotbit交易所因长期维护导致用户无法提币。某公众号内容中使用“Hotbit霍比特”误导了用户.

1900/1/1 0:00:00
CRV:关于ZT创新板即将上线ELON的公告

尊敬的ZT用户:ZT创新板即将上线ELON,并开启ELON/USDT交易对。具体上线时间如下:充值:已开启;交易:2021年5月13日18:30;ELON项目简介:Dogelon被视为一种公平的.

1900/1/1 0:00:00
区块链:关于开启赤兔云算平台第二期BTC抢购专场的公告

尊敬的用户:AOFEX携手赤兔云算上线BTC云算力,已于2021年5月11日17:00正式开启抢购,限量2,000T云算力用时仅3分钟即被迅速抢空!现特开展赤兔云算第二期BTC抢购专场.

1900/1/1 0:00:00