精华内容
下载资源
问答
  • 以太坊交易教程

    万次阅读 2018-07-31 01:34:52
    最近很多人都在问我挖出来的以太坊如何交易,我在这里系统的给大家进行介绍。 目前以太坊等虚拟货币有两种交易方式,我具体的讲述一下。 一、场外交易  场外交易就是个人与个人之间的交易,有一些网站提供了这样...

    最近很多人都在问我挖出来的以太坊如何交易,我在这里系统的给大家进行介绍。

    目前以太坊等虚拟货币有两种交易方式,我具体的讲述一下。

    一、场外交易

          场外交易就是个人与个人之间的交易,有一些网站提供了这样的交易方式,就跟淘宝很类似,有一些人在网站上挂出一些买的订单或者卖的订单,如果你对他的订单满意,你就可以跟他进行交易,值得注意的是,尽量挑选一些交易数目多,交易信用较好的卖/买家,这样不容易上当受骗,不过一些大网站有着比较成熟的体系,一般来说还是很靠谱的。

    支持比特币(BTC)交易的https://localbitcoins.com/,支付方式可以银行卡,支付宝,微信等多种方式

    支持比特币(BTC),以太坊(ETH),比特币现金(BCH),莱特币(LTC)的https://www.coincola.com/,支付方式可以银行卡,支付宝,微信等多种方式

    二、交易所交易

          第二类就是交易所交易了,值得注意的是交易所交易并不能像场外交易那样完成虚拟货币到法币(即人民币,美元这样的法定货币),一般都是和usdt进行交易,usdt是一种虚拟货币,不过usdt是和美元1:1,就是说价值跟美元保持一致,很多交易所提供法币到usdt的交易,就是说在交易所需要从虚拟货币变成usdt,再从usdt到法币的转换。

    这里提供两个网站的注册地址

    龙交所:https://dragonex.im

    火币网:https://www.hbg.com/

     

    展开全文
  • 探索以太坊交易

    万次阅读 2019-05-12 09:02:46
    本文将在一个比较深入的层次考察以太坊交易的组成部分,解释大部分令人费解的十六进制数是怎么确定的。 在本教程中,我们使用 node.js,所以我们首先从安装依赖关系开始。 $ npm install web3@0.19 ethereumjs-...

    以太坊可被看做基于交易的状态机:交易可以改变状态机,状态机可以记录跟踪交易。本文将在一个比较深入的层次考察以太坊交易的组成部分,解释大部分令人费解的十六进制数是怎么确定的。

    在本教程中,我们使用 node.js,所以我们首先从安装依赖关系开始。

    $ npm install web3@0.19 ethereumjs-util@4.4 ethereumjs-tx@1.3

    然后创建文件 tx.js ,请求依赖关系。

    var Web3 = require('web3');
    var web3 = new Web3(new Web3.providers.HttpProvider('https://ropsten.infura.io/'));
    var util = require('ethereumjs-util');
    var tx = require('ethereumjs-tx');

    首先我们从理解一个私钥开始。以太坊通过公钥加密进行授权。具体来说,用椭圆曲线数字加密算法,通过 secp256k1 标准生成公钥。除了有一些限制外,私钥只是一个随机的 256 位的数。例如:

    var privateKey = '0xc0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0de';

    通过私钥导出相应的公钥:

    var publicKey = util.bufferToHex(util.privateToPublic(privateKey));

    如果你输出公钥,可以看到下面的 16 进制数:

    0x4643bb6b393ac20a6175c713175734a72517c63d6f73a3ca90a15356f2e967da03d16431441c61ac69aeabb7937d333829d9da50431ff6af38536aa262497b27

    与私钥相关联的以太坊地址是用相应公钥进行 SHA3-256 (Keccak) 哈希运算后得到的后 160 位。

    var address = '0x' + util.bufferToHex(util.sha3(publicKey)).slice(26);
    //0x53ae893e4b22d707943299a8d0c844df0e3d5557

    2

    正如你看到的,多个私钥可以有相同的地址。一个以太坊账户与一个地址相关联,而且每个地址都有以下属性:

    • nonce:输出交易的次数,从 0 开始
    • balance:账户中的以太币数
    • storageRoot:与账户存储相关联的哈希值
    • codehash:控制账户的代码的哈希,如果它是空的,那么就是一个正常账户,能够通过私钥访问的,否则,它就是一个智能合约,其交互受到代码的控制

    接下来我们看一下交易,交易有 6 个输入域:

    • nonce:输出交易的次数,从 0 开始
    • gasPrice:交易中花费的单位 Gas 的价格
    • gasLimit:处理交易允许花费的最大 Gas 量
    • to:交易发送到的账户,如果是空,交易就会创建合约
    • value:发送的以太币的量
    • data:可以是任意的消息或合约函数调用或创建合约的代码

    一个发送 1000wei 以太并且留下消息 0Xc0de 的交易可以被构造如下:

    var rawTx = {
        nonce: web3.toHex(0),
        gasPrice: web3.toHex(20000000000),
        gasLimit: web3.toHex(100000),
        to: '0x687422eEA2cB73B5d3e242bA5456b782919AFc85',
        value: web3.toHex(1000),
        data: '0xc0de'
    };

    注意, from 地址并没有指定,在私钥签署后,它会从签名中提取。签署交易:

    var p = new Buffer('c0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0dec0de', 'hex');
    var transaction = new tx(rawTx);
    transaction.sign(p);

    然后交易就可以发送到网络上,而且能通过一个 256 位的交易 ID 进行追踪。这个交易可以在 Etherscan 中查看。交易 ID 是交易的哈希值

    console.log(util.bufferToHex(transaction.hash(true)));
    //0x8b69a0ca303305a92d8d028704d65e4942b7ccc9a99917c8c9e940c9d57a9662

    接下来,我们看一下指什么构成了函数调用的数据。以此次合约交易数据为例:

    console.log(web3.eth.getTransaction('0xaf4a217f6cc6f8c79530203372f3fbec160da83d1abe048625a390ba1705dd57').input);
    //0xa9059cbb0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e000000000000000000000000000000000000000000000000d02ab486cedbffff

    为了知道调用的是哪个函数,必须提前知道合约的所有的函数,才能创建哈希表。前 32 位 a9059cbb 是函数哈希的前 32 位。在当前情况下,函数为 transfer(address _to, uint256 _value) ,它的哈希为:

    console.log(web3.sha3('transfer(address,uint256)'));
    //0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b

    接下来是参数,每个 256 位,所以当前情况下 address 是:

    0x0000000000000000000000007adee867ea91533879d083dd47ea81f0eee3a37e

    uint256 是:

    0x000000000000000000000000000000000000000000000000d02ab486cedbffff

    接下来,如上所述,通过省略 to 域,可以建立一个合约。但是如何确定合约地址呢?以此交易为例:

    console.log(web3.eth.getTransactionReceipt('0x77a4f46ff7bf8c084c34293fd654c60e107df42c5bcd2666f75c0b47a9352be5').contractAddress);
    //0x950041c1599529a9f64cf2be59ffb86072f00111

    合约地址是发送者地址哈希值的后 160 位,而且 nonce 可以提前确定。对于这个交易来说,发送者和 nonce 可以在下列代码中发现:

    var contractTx = web3.eth.getTransaction('0x77a4f46ff7bf8c084c34293fd654c60e107df42c5bcd2666f75c0b47a9352be5');
    console.log(contractTx.from);
    //0x84f9d8b0e74a7060e20b025c1ea63c2b171bae6f
    console.log(contractTx.nonce);
    //0

    所以合约地址是:

    console.log('0x' + util.bufferToHex(util.rlphash(['0x84f9d8b0e74a7060e20b025c1ea63c2b171bae6f', 0])).slice(26));
    //0x950041c1599529a9f64cf2be59ffb86072f00111

     

    链接: https://medium.com/@codetractio/inside-an-ethereum-transaction-fa94ffca912f

    展开全文
  • 以太坊交易的生命周期

    千次阅读 2018-11-02 14:05:01
    了解以太坊交易是如何生成并在网络中广播的 交易是以太坊区块链(或任何类似的区块链)的核心。在与以太坊区块链进行交互之时,你是在执行交易并更新其状态。你有没有想过要了解当你在以太坊执行交易之时到底发生了...

    了解以太坊交易是如何生成并在网络中广播的

    在这里插入图片描述

    交易是以太坊区块链(或任何类似的区块链)的核心。在与以太坊区块链进行交互之时,你是在执行交易并更新其状态。你有没有想过要了解当你在以太坊执行交易之时到底发生了什么?让我们通过一则交易例子来解答这一问题。本文包括如下内容。

    以太坊交易的端到端遍历,即从你的浏览器/控制台出发进入以太坊网络,然后再回到你的浏览器/控制

    了解当你使用 Metamask 或 Myetherwallet 等插件,而非运行自己的节点之时,交易是如何进行的

    如果你比较偏执多疑,不信任任何插件,想自己执行交易,该怎么做?

    本文读者需要对以太坊及其组成部分,如账户、gas 和合约等具备基础性了解。关于这些概念的详细解释可以参见这篇文章(编者注:中译本见文末《以太坊中的账户、交易、Gas和区块Gas Limit》超链接)。如果你是一个不熟悉以太坊的开发者,这篇文章或许对你很有帮助。你也可以从这篇文章中学习如何构建简单的分布式应用。如果你已经有过执行交易的亲身经历,本文对你的意义会更大。例如,可以是将一些以太币发送给另一个人或合约的交易。再比如,还可以是在与分布式应用进行交互的情况下,如果你在这个网站上买了一些代币,这就是一笔交易。如果你为一位候选人投票,这也是一笔交易。

    一. 以太坊交易的端到端综述

    让我们以下列合约调用为例,并遍历该函数调用/交易是如何执行及永久存储在区块链上的整体流程。点击此处可了解整个合约。从较高层次来说,这是一个投票合约,其中你可以预置一些候选人在选举中进行角逐,任何人都能为他们投票。这些投票将会记录在区块链上。

    Voting.deployed().then(function(instance) {
    instance.voteForCandidate(‘Nick’, {gas: 140000, from: web3.eth.accounts[0]}).then(function® {
    console.log(“Voted successfully!”)
    })
    })
    在这里插入图片描述

    假设你在自己的计算机上本地运行了一个以太坊客户端(Geth 或 Parity),你的计算机连接到了某个以太坊网络(测试网络或是主网),你有权访问该合约地址和 ABI,从而执行该交易。

    如果你构建过分布式应用,应该对上述代码并不陌生。这是一个名为“Voting(投票)”的合约,已经部署在了区块链上。我们以该合约为例,执行一个叫作 voteForCandidate 的函数,输入候选人的姓名、该交易的gas上限和执行该交易的账户。从名称中可以看出,该函数能够用来为候选人投票,选票记录在区块链上。在下文,我们将尝试解构该调用,了解你在执行该 javascript 函数时会发生的一切。

    1. 构建原始交易对象
      如下图所示,voteForCandidate 函数调用首先被转化成了原始交易(rawTxn)。Web3js库被用来构建原始交易对象。

    txnCount = web3.eth.getTransactionCount(web3.eth.accounts[0])
    var rawTxn = {
    nonce: web3.toHex(txnCount),
    gasPrice: web3.toHex(100000000000),
    gasLimit: web3.toHex(140000),
    to: ‘0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b’,
    value: web3.toHex(0),
    data: ‘0xc7ed014952616d6100000000000000000000000000000000000000000000000000000000’
    };
    让我们试着了解下该原始交易对象中的所有字段,以及它们是如何设置的。

    nonce(随机数):每个以太坊账户都有一个叫做 nonce 的字段,来记录该账户已执行的交易总数。Nonce 的值随着每个新交易的执行不断增加,这能让网络了解执行交易需要遵循的顺序。Nonce 也被用来进行重放保护。
    gasPrice(gas价格):即你愿为该交易支付的每单位 gas 的价格。如果你正在主网上执行交易,ETH Gas Station上正好有一个网站,你可以参照其建议为你的交易设定 gas 价格,以便交易在一定时间内成功执行。Gas 价格目前以 GWei 为单位,其范围是0.1->100+Gwei。下文会进一步介绍 gas 价格及其影响。

    gasLimit(gas上限):即你愿为该交易支付的最高 gas 总额。该上限能确保在出现交易执行问题(比如陷入无限循环)之时,你的账户不会耗尽所有资金。一旦交易执行完毕,剩余所有 gas 会返还至你的账户。

    to:即该函数调用被送往的地址。0x633296baebc20f33ac2e1c1b105d7cd1f6a0718b 是我们的案例中投票合约的地址。

    Value(值):即你打算发送的以太币总量。当我们执行voteForCandidate函数时,我们根本没有发送以太币,因此 value 为零。如果你要执行一个交易,向另一个人或合约发送以太币,你会需要设置 value 值。

    data(数据):让我们来看看data字段是如何计算出来的。

    你先从 voteForCandidate(bytes32 candidate)(32字节的候选人)的 ABI 中获取函数签名,并得出它的哈希值。

    web3.sha3(‘voteForCandidate(bytes32 candidate)’)
    ‘0xc7ed014922ff9493a686391b70ca0e8bb7e80f91c98a5cd3d285778ab2e245b3’
    取该哈希值的前4个字节,即:0xcc9ab267。

    然后将参数‘Nick’转化为32字节,得到52616d6100000000000000000000000000000000000000000000000000000000

    将二者结合,得到数据有效载荷。

    2.签署交易
    如果你记得的话,你使用了web3.eth.accounts[0]来执行该交易。以太坊网络需要知道你确实是该账户的所有者,从而确保其他人不能以你的名义执行该交易。要向网络证明这点的方法是使用该账户的相应私钥签署交易。签署过后的交易如下图所示:

    const privateKey = Buffer.from(‘e331b6d69882b4ab4ea581s88e0b6s4039a3de5967d88dfdcffdd2270c0fd109’, ‘hex’)

    const txn = new EthereumTx(rawTxn)
    txn.sign(privateKey)
    const serializedTxn = txn.serialize()
    3. 交易经由本地验证
    签署过后的交易会提交至你的本地以太坊节点。然后你的本地节点会验证已签名的交易,确保它真的是由这个账户地址签署过的。

    1. 交易被广播至网络
      已签署交易经由你的geth/parity节点广播至其对等节点,这些对等节点再将该交易广播给它们的对等节点,以此类推。一旦交易被广播至网络,你的本地节点也会输出该交易的id,你可以用它来追踪你的交易的状态。该交易id就是已签署交易对象的哈希值。

    transactionId = sha3(serializedTxn)
    在这里插入图片描述

    如果你是在公共的以太坊网络上执行该交易的话,追踪你的交易状态的最佳方式是通过etherscan.io。如上图所示,你是否注意到了有几个节点被标记为 Etherscan 节点。Etherscan 的团队运行了几个节点,并将一个很棒的前端网络应用连接到了 Etherscan上。如果你的交易被他们的节点选中,你可以在他们的网站上查看自己的待定交易。

    还要记住的一点是,并非所有节点都会接受你的交易。其中一些节点可能被设置成了只接受 gas 价格超过某一最低值的交易。如果你设置的 gas 价格低于该下限,则节点会忽略你的交易。

    1. 矿工节点接受交易
      正如图中所示,以太坊网络同时拥有矿工节点和非矿工节点。可能你也知道,矿工的职责是将你的交易包含到区块上。矿工是交易池的维护者,你的交易先是被添加进交易池,再由矿工进行开始评估。

    在这里插入图片描述

    从上图中你会注意到矿工将所有交易存储在根据 gas 价格分类的池中。gas 价格越高,该交易就越有可能被添加进下一个区块。这是矿工节点的常见设定(为得到更高的报酬进行优化)。不过,矿工可以将自己的节点设置成根据自己的喜好对交易进行分类(例如,他们为了帮助网络只挖掘gas价格低的交易)。

    从上图中,你看出我们的 voteForCandidate 交易是如何沉入矿池底端的吗?一旦所有gas价格高的交易都被挖出来包含进区块之后,矿工将挖掘我们的交易。

    还有要注意的一点是,矿池可以容纳的交易数是有限的。比如,一场众筹正在火热进行中或是一个非常流行的分布式应用(如加密猫)横空出世。人们提交了 gas 价格高的交易,希望矿工能最先选中他们的交易。如果 gas 价格高的交易填满了矿池,gas 价格低的交易就会被放弃。我们的候选人 Nick 在一段时间内就别想收到任何选票了。在这种情况下,我们甚至得重新广播我们的交易。

    另一个能让你的交易在矿池里上升的技巧是重新提交你的交易,提高 gas 价格并维持 nonce 值不变。这样一来,当矿工接收到新交易时,gas 价格更高的新交易会覆盖之前的交易。如果改变了 nonce 值,重新提交的交易就会被认为是不同的交易(最后会为Nick举行两次投票)。这里推荐一篇很好的文章(编者注:中译本见文末《科普 | 释放阻塞的以太坊交易》超链接),作者Jim McDonald 对此做出了深入的解释。

    1. 矿工节点找到一个有效区块并将它广播至网络
      矿工最后选中了我们的交易,与其他交易一起包含进区块。矿工只能选择一定量的交易添加进区块,因为以太坊已经设置了单个区块 gas 上限,换言之,交易的所有 gas 上限总数不能超过区块 gas 上限。你可以在 ethstats.net 上查看当前 gas 上限。

    一旦矿工选择将交易包含进区块,这些交易将被验证并包含进一个待处理区块,工作量证明开始。某个矿工节点(通过解决工作量证明难题)最终会找到一个有效的区块,并将这一区块添加到区块链上。就像经由你的本地节点广播的原始交易会被其他节点接收那样,矿工节点也会将这一有效区块广播给其他节点。

    1. 本地节点接收/同步新区块
      最终,你的本地节点将接收这个新区块,并同步区块链在本地的副本。一旦接收到这个新区块,本地节点就会执行区块里的所有交易。

    如果你使用 truffle 执行你的交易, truffle 会不断测验区块链以求确认。一旦它发现交易被确认,就会执行 then() 区块中的代码,并打印(我们每个例子的)控制台日志函数。

    二. 使用Metamask而非本地节点

    在这里插入图片描述

    如果你安装了 MetaMask 浏览器插件,你就能在你的浏览器中管理你的账户。密钥只会存储在你的浏览器上,因此你是唯一一个有权访问你的账户和私钥的人。当你在浏览器上执行交易之时,插件会将你的函数调用转化成原始交易,并用你的私钥签署交易。 Metamask 运行自己的节点,并且使用这些节点来广播你的交易(Metamask 使用的是Infura 运营的节点)。如此一来,你就没必要运行自己的以太坊节点了。

    三. 线下签名

    如果你不喜欢用插件,或者担心你的本地 geth 节点有可能受损(遭篡改),该怎么办呢?要解决这一问题有一个安全之策。

    你是否注意到了,前两个步骤根本不需要联网。如果你想确保自己的交易绝对不会受到篡改,你可以使用一台没有联网的计算机将这一函数调用转换成原始交易,并使用你的私钥签署该交易。之后,你可以复制已签署交易串,并使用联网的计算机将其广播至网络。你可以使用 Etherscan和 Infura 等服务将你已签署的交易广播至网络。

    另一个安全之策是使用 Ledger 或 Trezor 等硬件钱包。这类钱包存储了你的私钥,而签署交易的密钥已经编程进了硬件本身。它们需要联网的原因只是为了发布你的已签署交易。

    感谢 Jim McDonald为本文校对。

    原文链接: https://medium.com/blockchannel/life-cycle-of-an-ethereum-transaction-e5c66bae0f6e
    作者: Mahesh Murthy
    翻译&校对: 闵敏 & Elisa
    稿源:以太坊爱好者(https://ethfans.org/ajian1984/articles/849)

    展开全文
  • 图解以太坊交易

    千次阅读 2019-01-13 16:15:37
    更多关于区块链技术和投资的文章,请关注微信公众号“币梭” ...  以太坊交易主要是指一条外部账户把经过签名的数据包发送给区块链上另一...以太坊上的每一笔交易都需要支付一定的费用,用于支付交易执行所需要的...

        更多关于区块链技术和投资的文章,请关注微信公众号“币梭”

    https://mp.weixin.qq.com/s/xs14qDrSVb24Ifm_ei6FQg

        以太坊的交易主要是指一条外部账户把经过签名的数据包发送给区块链上另一账户,这个数据包包含发送者的签名、接收者的地址以及发送者转移给接收者的以太币数量等内容。以太坊上的每一笔交易都需要支付一定的费用,用于支付交易执行所需要的计算开销。计算开销的费用并不是以太币直接计算的,而是引入Gas作为执行开销的基本单位,通过Gas Price与以太币进行换算。

    交易费用

        为了防止用户在区块链公有链中发送太多无意义交易,浪费矿工的计算资源,例如转账金额为0的转账交易,所以以太坊采用了交易收费的策略,要求交易的发送方为交易付出一定的代价。具体 来说,对于每一笔交易,交易的发送者都需要付出一定的交易费;这笔费用最终由将这个交易打包进主链的矿工收取。

        由于比特币中只存在转账交易,每笔交易所需的计算开销大体一致,因此每笔交易的发送者会以比特币的形式,付出固定的手续费。而以太坊引入了智能合约,涉及智能创建和调用的交易所消耗的计算差别巨大,因此引入相对复杂的Gas、Gas Price对交易所需的手续费进行定价。

    1、Gas

        Gas是用来衡量一笔交易所消耗的计算资源的基本单位。以太坊的交易可能涉及很多计算步骤,图1常见操作的需要消耗的Gas。当交易所需计算步骤越多,越复杂,那么这笔交易消耗的Gas越多。一笔普通的转账交易会消耗21000Gas,而一个创建智能合约的交易可能会消耗几万,甚至几百万Gas。

     

    2、Gas Price

        Gas Price是一单位Gas所需的手续费(以太币),目前以太坊钱包客户端默认的Gas Price是0.000000001 Ether/Gas(1Gwei)。也就说,如果一个交易需要消耗21000Gas,那么这笔交易的手续费为0.000021Ether。

        Gas Price不是固定的,可以根据需求自由调动。一般来说,矿工会对接受到的交易按照Gas Price或者按照 Gas * Gas Price从大到小进行排序,以便决定哪个交易先纳入到区块中。当以太坊公有链上某个时段交易量激增的情况下,为了尽早让矿工接受一笔交易,交易发送者可以提高这笔交易的Gas Price,以激励矿工。

    3、Gas Limit

        Gas Limit是对Gas的进行限制。

        对于单个交易,Gas Limit 表示交易发送者愿意为这笔交易执行所支付的最大Gas数量。Gas Limit可以保护用户免受代码错误影响以致消耗过多的交易费。另外如果没有Gas Limit限制,那么某些恶意用户可能会发送一个数十亿步骤的交易,并且没有人能够处理他,因为处理这个交易甚至需要花费比出块间隔更长的时间,然而矿工事前并不知道,所以导致拒绝服务式攻击。

        对于区块来说,Gas Limit是单个区块所允许包含的最大Gas总量,这个是由矿工来决定,一般设置Gas Limit越大,那么矿工就可以获取更多的交易费,但是需要更多带宽,同时会加大叔区块出现的频率,造成挖出的区块无法形成最长的交易链。因此矿工也不能任意地更改区块的Gas Limit,根据以太坊协议,当前区块的Gas Limit只能基于上一个区块的Gas Limit上下波动1/1024。

    交易内容

        一般一条交易可能包括下面的内容,

    • from:交易发送者的地址

    • to:交易接收者的地址

    • value:发送者要转移给接收者的以太币数量

    • data:数据字段,如果存在,则是表明该交易是一个创建或则调用智能合约交易

    • Gas Limit:表示这个交易允许消耗的最大Gas数量

    • GasPrice:表示发送者愿意支付给矿工的Gas价格

    • nonce:用来区别同一用户发出的不同交易的标记

    • hash:由以上信息生成的散列值(哈希值),作为交易的ID

    • r、s、v:交易签名的三个部分,由发送者的私钥对交易hash进行签名生成。

        按照场景,交易可以分为三种类型

    1)转账交易。转账是最简单的一种交易,从一个账户向另一账户发送以太币。

    web3.eth.sendTransaction({

        from:

        to:

        value:

    })

    2)创建智能合约的交易。

    web3.eth.sendTransaction({

        from:

        value:

    })

        创建合约是指将合约部署在区块链上,这也是通过发送交易来实现的。在创建合约的交易中,“to”字段是一个空字符串,在“data”字段中指定初始化合约的二进制代码,之后合约被调用是,该代码的执行结果将作为合约代码。

    3)执行智能合约的交易。

    web3.eth.sendTransaction({

    from:

    to:

    value:

    })

    该交易是为了执行已经部署在区块链上的智能合约,在该交易中,from是合约地址,to是要调用智能合约的地址。

    交易过程

        在以太坊中,交易的处理是一个过程,从账户发起交易请求开始,到包含该交易的区块被共识节点同步为止(一般来说,出于安全性考虑,会等到该区块后面再“挖”出一些块,这笔交易才算确定),满足这一个过程才算完成一笔交易。

    1、一笔普通的转账或合约调用的交易过程

    1)发送交易请求。发送者(用户A)按照格式要求在以太坊网络中发起一个交易请求,该请求被传向用户A的对等节点,如图2所示。

     

    2)交易请求验证和广播。网络上的节点(用户B)同步到此交易,检查交易是否有效、格式是否正确。如果符合要求,计算可能的最大交易费用,确定发送方的地址,并在本地的区块链上减去相应的费用,如果账户余额不足,则返回错误,这条交易废弃。对符合要求的交易请求,用户B将其放在交易存储池中,并且转发给其他节点。其他收到交易请求的节点重复用户B的处理过程。如图3所示。

    3)记账节点打包交易和执行合约。对于转账交易,获得记账权的节点将该交易和其他交易一起打包到区块中;对于合约交易,矿工将该交易和其他交易一起打包到区块中,并在本地的EVM上运行被调用的合约代码,直到代码运行结束或Gas用完。如果代码并未结束而Gas已经用完,那么代码运行而改变的状态回滚到代码运行之前,但是已经支付的交易费用不可收回,交易费用有获得记账权的矿工获得。如果代码运行结束Gas还有剩余,那么矿工也只会获得消耗Gas x GasPrice作为手续费,不会收取剩余Gas对应的手续费。如图4所示。

    4)区块广播。用户B把包含用户A的交易请求的区块发送至对等节点,并在全网传播。如图5所示。

    5)区块验证同步。其他节点收到该区块后,验证区块,如果区块通过验证,节点将内存池中原来用户A的交易请求删除,同时同步该区块,将其添加到本地的区块链中。对于区块中的执行智能合约的交易,其他节点会在本地的EVM上运行该智能合约,并互相验证运行的结果。如图6所示。

        通过上面五个步骤,整个交易的过程已经结束。但是一般来说,当包含交易的区块链被同步到区块链后,出于安全性的需求,还需要再挖掘一些块,这笔交易才能算是真正地被确认。

    2、一个创建智能合约的交易过程

        注:有些步骤和普通转账的一样,交易的图就不画了

    1)发送创建智能合约请求。发送者(用户A)按照一定的格式要求,在以太坊中发起一个创建智能合约的交易请求,如图7所示

    2)交易请求验证和广播。网络上的节点(用户B)同步到此交易,检查交易是否有效、格式是否正确。如果符合要求,计算可能的最大交易费用,确定发送方的地址,并在本地的区块链上减去相应的费用,如果账户余额不足,则返回错位,这条交易废弃。对符合要求的交易请求,用户B将其放在交易存储池中,并且转发给其他节点。其他收到交易请求的节点重复用户B的处理过程。

    3)打包,创建合约账户,部署合约。获得记账权的节点将该交易和其他交易一起打包到区块中,获得记账权的节点会根据其提供的交易费用和合约代码,创建合约账户,并在账户空间中部署合约。智能合约账户的地址是由发送者的地址(address)和交易随机数(nonce)作为输入,通过加密算法生成的、交易确认后智能合约的地址返回给发送者。如图8所示。

    4)区块广播。用户B把包含用户A的交易请求的区块发送至对等节点,并在全网传播

    5)验证区块,并部署智能合约到本地。共识节点接收到该区块,验证区块,如果区块通过验证,节点从内存池将原来用户A创建智能合约的交易请求删除掉,同步区块链,并将智能合约部署在各自的本地区块链中。如图9所示。

        经过上面的五步,创建智能合约的交易完成。但是一般来说,当包含交易的区块链被同步到区块链后,出于安全性的需求,还需要再挖掘一些块,这笔交易才能算是真正地被确认。

     

    更多区块链技术和投资文章,请关注微信公众号“币梭”

    展开全文
  • 以太坊交易源码分析

    千次阅读 热门讨论 2018-05-28 18:38:41
    这篇开始分析以太坊交易相关代码。基本流程参见下图: 可以看到,完整流程分为以下几个步骤: 发起交易:指定目标地址和交易金额,以及需要的gas/gaslimit 交易签名:使用账户私钥对交易进行签名 提交交易:...
  • 以太坊交易确认数如何获取

    千次阅读 2019-01-08 07:18:41
    当一个以太坊交易所在区块被新加入区块链时,该交易的确认数为1,之后每增加一个区块,该交易的确认数加1。显然,一个以太坊交易的确认数越多,就意味着该交易在区块链中埋的越深,就越不容易被篡改。那么,应该如何...
  • #以太坊交易执行分析在这里,将其整体串起来,从state_processor.Process函数开始,归纳一下其所作的处理。##1 ProcessProcess 根据以太坊规则运行交易信息来对statedb进行状态改变,以及奖励挖矿者或者是其他的叔父...
  • 以太坊交易签名详解

    千次阅读 2019-07-15 10:51:03
    以太坊中的交易指的是从用户账户(EOA)中发出的含有消息的签名数据包,该数据包存储着要从一个帐户发送到区块链上的另一个帐户的消息。 交易的主要结构 &n交易数据结构是经过序列化后在以太坊网络上进行传输...
  • 本文以ethers库为底层实现,讲述了在Javascript中构建的以太坊交易对象的详细属性,本文假定读者掌握一定的以太坊基础知识。 一、什么是ethers库  下面是它的文档的一个原文介绍:  The ethers.js library aims to...
  • 释放阻塞的以太坊交易

    万次阅读 2019-05-12 08:14:59
    发送以太坊交易时,有许多方法可以确定最佳gas值。https://ethgasstation.info等网站提供了gas使用情况的概述,https://www.etherscan.io/txsPending提供了当前交易池的有关信息。 后者的网站特别有用...
  • 以太坊交易中的Nonce详解
  • 以太坊交易生命周期

    千次阅读 2018-04-04 13:17:41
    让我们通过一个例子来探讨说明以太坊交易的本质,在这篇文章中我们会覆盖以下知识点:全端剖析交易从用户浏览器或者命令行发起交易到区块链全网广播到返回用户终端的过程理解使用钱包插件替代全数据节点时交易是如何...
  • 以太坊交易确认数的计算方法

    千次阅读 2019-01-07 15:43:51
    当一个以太坊交易所在区块被新加入区块链时,该交易的确认数为1,之后每增加 一个区块,该交易的确认数加1。显然,一个以太坊交易的确认数越多,就意味着 该交易在区块链中埋的越深,就越不容易被篡改。那么,应该...
  • 【转】以太坊交易的生命周期

    千次阅读 2019-05-12 07:56:39
    以太坊交易的生命周期 了解以太坊交易是如何生成并在网络中广播的 交易是以太坊区块链(或任何类似的区块链)的核心。在与以太坊区块链进行交互之时,你是在执行交易并更新其状态。你有没有想过要了解当你在以太...
  • 以太坊交易收发机制

    万次阅读 2019-04-15 07:34:35
    交易的主要数据结构 序号 数据 描述 备注 1 AccountNonce 发送者的发起的交易总... 以太坊地址 | 3 Price 此次交易的 gas price | 4 GasLimit 本交易允许消...
  • 以太坊交易手续费

    千次阅读 2019-01-09 09:50:41
    以太坊发出交易或者其他一些东西的时候,如果手续费计算有问题或者没有在此之前半段账户余额是不是充足,便会碰到“insufficient funds for gas * price + value”异常。今天就带大家看看源代码分析一下此异常的...
  • 以太坊交易Nonce设置

    千次阅读 2018-06-12 19:14:49
    以太坊中的nonce有两个意义:1.工作量证明:为了证明工作量的无意义的值,这是采矿的本质,这个值将决定采矿的难度,2.账户的随机数:在一个账户中的防止多重交易的用途。例如一个交易从A到B 20个币,可能从A到B发送...
  • 基于HSM的以太坊区块链密钥管理解决方案 使用HSM生成并签署以太坊交易 基于给出的有关使用HSM签署以太坊交易的的步骤。 我使用和开源实现。
  • 以太坊交易中,在使用同一个地址连续发送交易时,每笔交易往往不可能立即到账, 当前交易还未到账的情况下,下一笔交易无论是通过eth.getTransactionCount()获取nonce值来设置,还是由节点自动从区块中查询,都会...
  • 以太坊内部交易和代币交易

    千次阅读 2019-04-25 19:36:41
    要理解它们之间的区别,我们首先要了解以太坊上的外部和内部地址的概念。 外部和内部地址 以太坊中有两种类型的地址(帐户):外部和内部。 当用户创建一个地址时,它被称为外部地址,因为它用于从外部访问区块链,...
  • 以太坊交易确认数怎么计算?

    千次阅读 2019-01-07 08:01:44
    当一个以太坊交易所在区块被新加入区块链时,该交易的确认数为1,之后每增加 一个区块,该交易的确认数加1。显然,一个以太坊交易的确认数越多,就意味着 该交易在区块链中埋的越深,就越不容易被篡改。那么,应该...
  • 显示EthGasStation提供的当前汽油价格 实时更新以太坊交易费信息,方便快捷安全省钱,你值得一试 支持语言:中文 (简体)
  • 以太坊(ETH)钱包开源程序,支持以太坊链上所有代币存储,接收,发送,离线交易,币种兑换,智能合约,可以在本地运行。
  • 网址:http://www.qukuailianxueyuan.io/欲领取造币技术与全套虚拟机资料区块链技术交流QQ群:756146052 备注:CSDN尹成学院微信:备注:CSDN
  • 以太坊交易中的nonce

    千次阅读 2018-07-28 07:10:49
    以太坊交易中的nonce 最近在做交易方面的一些事,在讨论时发现了一个没有注意过的细节。以前只重点关注了nonce不能比当前小,目的是为了双花,在分析的博客里也说明过。但是没有想过这个需要是连续的,不过后来一经...
  • 以太坊怎么购买,如何在交易平台上购买以太坊  近两年火遍全球的以太坊、比特币等虚拟货币,在2019年依然备受投资者的关注,尤其虚拟币合约交易的出现,为这个市场带来了新的活力,也为投资者提供了更安全简单的...
  • web3js 监控以太坊代币交易

    千次阅读 2019-09-10 17:47:57
    监控以太坊交易记录,监控以太坊代币交易; 如题: 如何监控以太坊交易记录 一般都是监控代币转账记录; erc20标准的转账 //转账方法 function transfer(address to, uint256 value) public returns (bool); ...
  • 符合ES5的以太坊交易构建器 入门 该模块允许在以太坊中创建,签名和验证原始交易。 它还支持创建新帐户以及将私钥转换为公钥和地址。 编写此软件包的目的是为手动创建以太坊交易提供一个简单的界面,就像bitcoin-...
  • 不管你们知不知道以太坊(Ethereum blockchain)是什么,但是你们大概都听说过以太坊。最近在新闻里出现过很多次,包括一些专业杂志的封面,但是如果你们对以太坊到底是什么没有一个基本的了解的话,看这些文章就会...
  • Infura Http 客户端 以太坊 交易

    千次阅读 2018-07-21 14:20:03
    以太坊交易 中离线交易和签名部分和 web3j如何使用管理APIs 。 原文《Java以太坊类库web3j官网中文翻译》中的: http://cw.hubwiz.com/card/c/web3j/1/10/3/ 另外推荐几个很受欢迎全网稀缺的互动教程: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,987
精华内容 14,394
关键字:

以太坊交易网站