主页 > imtoken官网下载1.0安卓 > 科普 | 创建和签署以太坊交易

科普 | 创建和签署以太坊交易

imtoken官网下载1.0安卓 2024-01-26 05:15:31

如何获取以太坊币_以太坊交易信息获取_以太坊币交易网站

在我们之前的文章中,我们已经解释了创建私钥的作用以及如何创建私钥。 具体来说,在第一部分,我们了解到密钥只是一个很大的随机数,没有别的; 在第二部分中,我们学习了如何使用一个大的随机数来创建一个可以存放资产的密钥以太坊钱包。 在这最后一部分中,我们将学习如何使用此类随机数来签署和操纵您自己的虚拟资产。

交易——旧出新入

区块链交易与银行交易没有特别不同。 如今,大多数银行都允许您以数字方式进行大部分操作:将钱转账给他人、将钱存入您的储蓄账户,甚至借钱等等。 互联网技术使我们能够在不在场的情况下完成大部分工作。

虽然这些操作对您来说很容易,但对银行来说既不容易也不便宜。 在幕后,有多个第三方参与您银行业务的结算、验证和验证。 如果这还不够,为了遵守银行法规,金融机构还必须执行繁重的步骤以确保您(发起操作的人)是有权操作您帐户的人。 所有这些层都产生了沉重的成本,这就是为什么像 Visa 和 Mastercard 这样的网关在每次提供服务时都会收取费用,通常是根据转移的金额。 当然,您随时发起的任何操作都可以被冻结甚至撤消。

如何获取以太坊币_以太坊交易信息获取_以太坊币交易网站

以太坊币交易网站_以太坊交易信息获取_如何获取以太坊币

- 2017年,欧盟要求金融机构实施支付服务指令2(Directive 2015/2366),这意味着银行必须实施包括SCA(Strong Authentication)在内的安全法规。 由于 PSD2+SCA 的成本问题,2019 年 3 月只有 59% 的欧洲银行成功满足监管要求,将最后通牒又推迟了一年。 -

区块链交易规则不同

由于公链的分布式和免许可的特性,任何人都可以在网络中签署和广播交易。 基于区块链的特性,你需要预留一部分资金作为手续费,这样你的交易才能被“挖矿”(即被矿工打包上链),但是手续费视用户使用区块链的需求而定,与转移的价值多少无关。 例如,使用一个以太坊账户向另一个账户转账 1 美元的费用与转账 100 万美元的费用相同。 只要手续费相同,两笔交易被矿工同等对待,将被打包成有效区块传播到全网。

如何获取以太坊币_以太坊币交易网站_以太坊交易信息获取

- 一个区块包含一系列交易,区块一个接一个,只增不减。 因为新区块中的部分数据来自于前一个区块,这些“区块”会一个接一个地形成一条有序链,这就是“区块链”名称的由来。 区块链还使用了一种易于处理和验证的数据结构,称为“默克尔树”,这也是为什么在区块链上几乎不可能伪造某个交易或某个区块的部分原因——如此容易识别。 -

此外,区块链交易不需要任何权威机构的验证。 发行有效交易,只需要使用区块链系统的数字签名算法(DSA)对应的私钥,为交易生成签名。 以太坊和比特币区块链使用 ECDSA 算法,而 Cardano 和 Polkadot 使用 EdDSA 算法。 这两种算法都依赖于椭圆曲线密码学,但后者使用扭结的爱德华兹曲线,这是对一般数字签名的改进。 任何账户都可以使用私钥签名发起交易,但只有余额充足的地址发起的交易才能成功执行。

以太坊币交易网站_以太坊交易信息获取_如何获取以太坊币

如何获取以太坊币_以太坊交易信息获取_以太坊币交易网站

- 椭圆曲线签名算法基于“离散对数问题”。 它的经典形式是,给定一个整数 k 使得 a^k ≡ b (mod p),其中 p 是一个素数,求 k。 不像 RSA 等其他公钥密码算法,它仅基于大指数的因式分解问题(最近已成为基于格的密码学的目标)。 今天尚未发现计算 k(可以描述为椭圆曲线上的给定点 P 和 Q)的有效方法。 这就是为什么虽然不同的区块链使用不同的曲线和签名算法,但它们都是基于椭圆曲线的。 -

一旦交易被签署,与签名一起发送到网络,并打包成一个成功开采的区块,交易就不能被撤销。 与银行操作不同,一笔成功打包上链的交易无法撤销,也无法恢复到交易尚未执行的状态。 大多数公链使交易内容完全可见,因此这些交易使用的区块链是这些资产的最终真相来源。

以太坊交易结构

现在我们已经完全理解了区块链交易的本质,我们已经准备好创建以太坊交易。 我们从一个简单的转账交易开始:转0.1 ETH到地址0x17A98d2b11Dfb784e63337d2170e21cf5DD04631。 交易可以用 JavaScript Object Notation (JSON) 格式表示以太坊交易信息获取,我们可以在创建此交易时在 MyEtherWallet 上看到此信息(登录后使用离线发送):

{   "nonce": "0x00", // 0 in decimal  "gasLimit": "0x5208", // 21000 in decimal  "gasPrice": "0x3b9aca00", // 1000000000 in decimal  "to": "0x17A98d2b11Dfb784e63337d2170e21cf5DD04631",  "value": "0x16345785d8a0000", // 100000000000000000 in decimal  "data":"0x", // “empty” value in decimal  "chainId": 1 // Ethereum network id}

如何获取以太坊币_以太坊交易信息获取_以太坊币交易网站

(编者按:MyEtherWallet网站最大的目的就是帮你生成一个以太坊账户,但是直接用它发送交易可能需要你暴露你的私钥或者助记词,这是一种非常不安全的做法,极不推荐。如果您想使用 MyEtherWallet,请使用他们的浏览器插件或手机钱包,而不是直接使用他们的网站。)

这里马上会弹出几个值:nonce、gasLimit、gasPrice、data、chainId。 它们都与交易的内容无关,但都与交易的执行方式有关。 这是因为,为了在以太坊上发送交易,你必须提前定义一些额外的参数来告诉矿工如何处理你的交易。 交易的两个参数都与“gas”有关。 Gas 本身是一个用于衡量交易计算负担的单位,作为支付给以太坊矿工的基础。 一个参数是gasPrice,表示用户愿意为每单位gas支付的单价,单位为Gwei(Gwei为ETH的1/10^9); 另一个是gasLimit,这是用户可以为其交易数量指定的最大gas。 这些参数可以由以太坊节点估算出一个合理的值,一般由钱包服务商为您填写。

如何获取以太坊币_以太坊交易信息获取_以太坊币交易网站

- 以太坊中的价值通常以 wei 衡量。 Wei是以太坊区块链上最小的价值单位,是ETH的1/10^18。 Gas Price 通常以 giga wei(缩写为 Gwei)为单位。 汽油价格在以太坊网络上是一个复杂的问题,因为它经常波动。 EIP-1559 是最近通过的一项网络变更,可能会在今年年底推出,并可能缓解天然气价格的剧烈波动。 除了 wei 和 Gwei,还有其他单位用于表示值。 要了解这些单位,请访问 eth-converter.com-

(编者注:本文发表于2021年4月,现已确定以太坊核心开发者决定将1559纳入2021年8月的“伦敦”升级中。1559改变了用户体验,用户不再直接指定Gas Price而是指定两个值:MaxFeePerGas和MaxPriorityFeePerGas,前者表示你愿意为一单位Gas支付的最高价格,而后者表示你愿意为一单位Gas支付给矿工的最高价格;实际上,你为 Gas 支付的单价是 min(MaxFeePerGas, MaxPriorityFeePerGas + BaseFee)(即两者中较小的那个)而 BaseFee 是一个随着网络最后一个区块的满载率自动波动的值。矿工获得的单价是你的Gas单价减去BaseFee;BaseFee部分会被销毁。值得注意的是,在可预见的未来,用户仍然可以使用传统的交易格式发送transa ctions,但这种格式最终可能会在协议层被放弃,即本文中描述的以太坊交易格式可能有一天会过时。)

除了 gas 参数外,您还需要指定在哪个网络上执行交易。 以太坊网络包括 chainId 为 1 的主网和其他测试网(testnet)。 你也可以在测试网上发送交易而不会损失任何钱,因为测试网络的 ETH 是可以免费获得的。 一般来说,如果要部署一个dApp,第一步应该是在本地网络调试,然后部署到测试网,最后一步是部署到主网。

以太坊币交易网站_以太坊交易信息获取_如何获取以太坊币

最后但同样重要的是,我们有数据和随机数。 如果要向事务中添加额外的数据,则需要使用数据字段。 当您与智能合约交互时,数据字段可以包含您对合约的指令。 nonce(“a number used only once”)是以太坊网络用来跟踪你的账户状态,避免多次支付和重放攻击的一个值(可以理解为序列号)。 当你的交易因为gas fee太低而暂时无法打包时,你可以使用相同的nonce但指定更高的gas price来“替换”你卡住的交易; 一旦这个“更快”的交易可以打包上链,你原来签署的交易(因为使用了相同的随机数)将被以太坊节点丢弃。

签署以太坊交易

形成上面提到的JSON编码后,我们就可以下去开始签名流程了。 正如我们提到的,这个过程使用 ECDSA 算法。 这里我们将使用一个常用的库ethers.js,它封装了secp256k1曲线上使用ECDSA算法生成签名所需的椭圆曲线。

const ethers = require("ethers")const signer = new ethers.Wallet('0x007120583af460144032f1f0c6cfde5a5fd58ee8e7702f5b7d324421715dd695')
signer.signTransaction({ "nonce": "0x00", // 0 in decimal "gasLimit": "0x5208", //21000 in decimal "gasPrice": "0x3b9aca00", //1000000000 in decimal "to": "0x17A98d2b11Dfb784e63337d2170e21cf5DD04631", "value": "0x16345785d8a0000", //100000000000000000 in decimal "data":"0x", // “empty” value in decimal "chainId": 1 // Ethereum network id}).then(console.log);

您可以使用 Runkit 在线测试此代码,并将其与 MyEtherWallet 上的结果进行比较。 这里使用的私钥是0x616E6769652E6A6A706572657A616775696E6167612E6574682E6C696E6B0D0A。 (编者注:这里暴露私钥只是为了教学,任何时候暴露私钥都是一种极不安全的行为,有可能导致您账户中的所有资产丢失!请避免暴露私钥和协助记词。)结果是0xf86b80843b9aca008252089417a98d2b11dfb784e63337d2170e21cf5dd0463188016345785d8a00008025a02e47aa4c37e7003af4d3b7d20265691b6c03baba509c0556d21acaca82876cb4a01b5711b8c801584c7875370ed2e9b60260b390cdb63cf57fa6d77899102279a0,表示的是你已经签过名的交易,可以发送到以太坊网络中了。 You can use MEW directly, or Alchemy's online tool Composer, to pass your signed transaction to the Ethereum network. The具体原理是使用eth_sendRawTransaction的RPC方法与以太坊节点进行交互。

现在签名,稍后发送

以太坊交易信息获取_如何获取以太坊币_以太坊币交易网站

上述签名过程可以称为“离线签名”。 因为我们先创建了签名,然后找到了广播它的方法。 但是很多在线钱包结合了签名和广播(例如Metamask和Portis),签名后立即广播。 然而,离线签名对于许多应用程序非常有用,例如状态通道。 所谓状态通道就是监控两个账户的智能合约,根据两个账户提交的签名交易完成双方的资金结算。 离线签名也是去中心化交易所的常见做法:买入和卖出订单都存储在链下,两笔交易只有在撮合成功后才在链上结算。 它还在 zkRollup 和 Optimistic Rollup 等 Layer2 解决方案中发挥着重要作用。

借助 Portis,您可以使用签名交易与加油站网络 (GSN) 进行交互。 Portis 在 GSN 中订阅了一组中继器,它们可以为您的交易支付 gas 费。 这些中继器与去中心化合约相关联(例如 Ropsten 测试网上的这个合约),Portis 可以要求他们中继您的交易。 你仍然需要签署你的交易,但 Portis 会为你做所有其他事情,这样即使你使用一个没有余额的全新钱包来支付 gas,你仍然可以与智能合约进行交互。 在我们的 cryptopuppers 应用程序上试试吧! 如果您想了解更多,这里是 GSN (EIP-1613) 的规范。 此外,您还可以观看 TabooKey 团队使用 Portis 钟爱的 cryptopuppers 应用程序的演示。

说完签名过程以太坊交易信息获取,我们的私钥系列就跟大家说再见了。 如果你暂时不落后,你应该能明白以太坊账户是怎么来的,以太坊交易是怎么回事。

(结束)

(本文链接较多,可点击左下方“阅读原文”从EthFans网站获取)

原文链接: