数据如何有效加载智能合约

解释Token Foundry的智能合约如何工作以及在促成销售时要求所有用户包括的数据有效载荷。

在线购买任何物品都会带来一定的风险。 作为消费者,您需要对完成交易进行成本效益分析。 您的购买安全吗? 您能保证在承诺的状态下收到购买的商品吗?

当考虑在诸如以太坊这样的分散网络上进行购买时,人们可能会感觉到一种额外的警告购买者的感觉。 但是,我们没有设计第三方中介,而是设计和构建了智能合约,使购买能够安全,公平地进行。

以这种方式使用的智能合约是用于确保交易在购买时可靠地发生的协议。 我们在智能合约中添加了一个称为“数据有效载荷”的功能,以阻止不良行为者在以太坊上进行交易,从而为每个人建立一个更强大,更公平的网络。

这篇文章旨在深入了解我们如何设计智能合约,尤其是为什么默认情况下我们需要数据有效负载。

以太坊代币销售的组成部分

让我们从核心概念开始:构建交易以在销售期间购买代币。 我将首先说明交易中包含的不同字段,以及参与代币代工销售时为什么要求使用这些字段。 (如果您有在以太坊上购买令牌的经验,请随时跳到我描述我们如何构造数据有效负载的地方。)如果您只是在学习,这应该有助于您更深入地了解以太坊的内部工作原理。

首先,什么是天然气?

在整个本文中,您将看到我引用了一种称为gas的东西。 Gas是用于衡量完成交易所需的计算工作量的单位。 您可以像对待电一样思考天然气。 例如,每天使用同一只灯泡所需的能量数量将是恒定的,但每天每单位能量的成本将有所不同。 该成本根据给定时间对能量的需求量而变化。 相同的概念可以应用于气体。 每天需要花费相同数量的天然气来完成完全相同的交易,但是根据网络负载,每单位天然气的成本可能会大不相同。

{
“来自”:“ 0xb60e8dd61c5d32be8058bb8eb970870f07233155”,
“至”:“ 0xd46e8dd67c5d32be8058bb8eb970870f07244567”,
“ gas”:“ 0x76c0”,// 30400
“ gasPrice”:“ 0x9184e72a000”,// 10000000000000
“值”:“ 0x9184e72a”,// 2441406250
“数据”:“ 0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675”
}

参考:https:// github.com / ethereum / wiki / wiki / JSON-RPC#eth_sendtransaction`

交易领域

这是发送交易的以太坊地址。 如果是代币销售,它必须是您在Token Foundry平台上注册的地址。 这将是您从中购买的地址,并且在代币销售结束时,这还将是有权访问您的代币的地址。

这是将交易发送到的以太坊地址。 通常,这是您要转账或调用其功能的帐户或智能合约。 在代币销售中,这是销售的合同地址

加油站

(可选字段,但建议使用。)也称为“气体限制”。 这是您提供的用于执行交易的最大天然气量。 除非另有定义,否则它将默认为特定值。

天然气价格

(可选字段,但建议使用。)您愿意为每单位天然气支付的醚数量,通常以每Wei或每Gwei的价格(这些是ETH的子单位)的价格输入。 如果您希望更快地确认交易,则应提交高于平均水平的汽油价格。 除非另有定义,否则它将默认为特定值。

您要发送到TO地址的ETH数量。 发送前请务必检查面额。

数据

在以太坊上向智能合约发送交易时,合约将有权访问此数据字段。 数据包括函数签名的哈希值的前4个字节,后跟ABI编码的参数作为抽象。 简单来说,这就是您要调用的合约中的函数,以及您要传入的必需参数。

数据有效载荷

如果您参加过先前的代币销售,您可能已经注意到,他们不需要您添加“交易数据”字段或数据字段。

Token Foundry要求购买者包括此字符串的原因是因为在该数据段中,我们验证了有关贡献者本身的许多信息。 这包括:

  • 您被允许发送以太币的地址
  • 您可以贡献的以太币限制
  • 您是否通过了项目问卷
  • 是否通过代币代币进行KYC
  • 由Token Foundry的白名单管理员生成的实际签名,以验证您是否被允许贡献

这是我们确保无需将每个地址添加到用户注册表即可允许购买者参与销售的方式。 为了防止用户任意构造数据有效区,我们的智能合约使用“签名者”的私钥对紧密打包的参数的哈希值进行签名。 通过这样做,我们能够通过我们的智能合约来验证与交易一起传递的数据有效负载中的签名是由Token Foundry构建的。

Solidity中有一个很酷的功能,称为ecrecover,可从消息和签名中恢复签名者的地址(如果签名者实际对消息进行了签名)。 在撰写本文时,我们正在使用open-zeppelins恢复功能的当前实现,可以在此处找到。 https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/ECRecovery.sol

结论

在以太坊上发送交易可能是一项艰巨的任务,但是希望这篇文章可以帮助您更多地了解点击“发送”的幕后花絮。 我们将继续添加更多技术博客文章以及视频,这些视频将带您从头到尾在Token Foundry平台上发送交易。

斯图尔特·亨特
技术主管