用ETH直投lC0的坑| 交易所和GAS设置问题

作者: 树的回忆00 | 来源:发表于2017-12-21 01:46 被阅读623次

    作为保守党,本来是本着看技术看设计,不参加任何ICO的原则的。奈何ICO风头太劲,连公司董事会都开始问我们能不能也ICO... 真是什么人都想通过ICO捞一笔钱了。
    最近选了些ICO来做试验,来了解过程也体会一些其中的模式。在此收集过程中观察到的坑,供参考:

    1. 不从交易所临时钱包直接转账参与ICO

    image.png
    ❌头等大事,不要用交易所的临时钱包直接转账!在ICO过程中,其实很多项目团队会良心提醒,不要用交易所的地址转账,可是还是有不少人这么做。。
    *✅应该仔细检查ICO团队发布的钱包要求或者兼容钱包的信息。直接从自己掌握密钥的钱包进行转账,保证ICO后的代币会发到自己的钱包里。
    ICO团队提醒例子.png
    ICO团队提示用什么钱包 提醒不从交易所转账.png

    疑问:如果坚持从交易所转账,会有什么后果呢?

    1. 交易所转账出来的时间不一定有保证。
      ICO的时候常常根据不同的时间窗口对投资人给与奖励,比如20%,15%的额外代币等等。交易所转账出来的过程中耽误的时间就可能影响你获得的奖励的数量。那么用自己的钱包怎么保证转账速度呢?如果要抢投ICO,在ICO开始前几天就把交易所里的币提到自己的钱包里放着,然后到ICO开始的时间点,从自己的钱包转账出去。进行这个交易的时候可以适当的提高GAS PRICE来激励矿工尽快打包你的交易。本文后面详细解释GAS PRICE。
    2. 交易所账户不是你自己的账户,使用自由度有限。
      交易所的账户和银行账户的概念是不同的。正常生活中的银行账户是你依赖第三方管理你的财产,但是你还是可以相对自由的使用你的财产。交易所的账户虽然也可以临时保管你的资产,可以看到资产的增减和品种,可是不同交易所对用户支配资产的自由度是有限的。
      对于你自己的钱包,因为你拥有了私钥,你就拥有财产的支配权。交易所的账户虽然为你而开,可是你并没有拿到它对应的私钥。你只有交易所的登录账户和密码。往坏点的方向想,哪个交易所登录账号密码被盗了,就算你有交易所钱包的地址,但是没有掌握私钥,你也永远也拿不到你的资产。
    3. 你无法立即拿到自己投到的ICO 代币
      用交易所钱包投最头疼的问题应该就是,ICO过程使用的智能合约,一般就是把ICO的代币发送回给它投资的地址。你用交易所钱包投资,它就用把代币送回交易所钱包地址。有一些交易所是只有一个总钱包地址的,用户登录之后只有用户名密码,没有属于自己的一个临时钱包。这种情况下ICO换回来的币就会被发到交易所的总地址,交易所根本不知道是谁参加了这次ICO。。在区块链浏览器上看到的代币的拥有者是交易所,而不是你,你根本无法自证你是真正的拥有者。
      接下来也许有的交易所会渐渐升级,让自己也支持直接参投ICO,并且把智能合约发回来的代币放到正确的账户。但就算这样也还是要注意,只要你参投ICO的钱包并不是由你一个人全权控制(你拥有私钥),那么出了问题还是自己的责任。

    例如,这个交易所只做现金兑换BTC/ETH的交易,可是由于有不少人误用交易所地址进行ICO,在以太浏览器中就会看到交易所地址下有各种ICO产生的代币,关键价值是价值还不低呢!!:


    交易所地址下无主人的代币

    简而言之,NO作NO DIE。想去投ICO就不要懒得做创建自己钱包这一步,为自己负责。

    2. 以太坊GAS的问题,注意ICO智能合约需要的GAS数量!

    参投ICO的我们会觉得投ETH进入智能合约地址参与一点困难也没有,直截了当。其实其中有个坑,那就是智能合约的GAS问题。
    理想状态中,只要你发送ETH进入合约地址,合约会根据代码兑换给你一定量的代币。可是我们随意看一个ICO的合约,就会发现很多交易被打上了 ❗️感叹号。如下图所示。

    没耐心看原因的伙伴请直接跳到最后看“简单的说怎么做?”部分

    有感叹号的交易.png
    这个现象其实非常频繁,你也可以看一看。用以太坊区块浏览器,输入一个ICO的智能合约地址,比如EOS | https://etherscan.io/txs?a=0xd0a6e6c54dbc68db5db3a091b171a77407ff7ccf

    发生了什么呢?

    点击任意一个有红色感叹号的交易,会发现交易信息中显示: OUT OF GAS

    什么意思呢?简单地说就是这笔交易汽油不够,进行到一半跪了!你的投资没有成功,但是交易费也被矿工收走了,作为他们的辛苦费。

    这是怎么回事?

    这里要说到以太坊的矿工费机制。以太坊上的矿工/矿机靠运行智能合约代码和打包交易进入区块链获得矿工费。两种模式有细微差别。

    1. 打包交易进入区块链,矿工会获得交易发起人承诺的矿工费。
    2. 运行智能合约的代码,根据代码运算量和运算单位价格获得矿工费。

    智能合约的本质,就是一堆代码。运行代码怎么算钱?以太坊设计之初就算好了,代码被转换成OPCODE(搞嵌入式系统的朋友估计看着眼熟),大俗话是机器的操作码,然后每个操作码有的运算时间长有的时间短,以太坊依据这个给矿工算钱。


    OPCODE差不多都长这样

    要运行智能合约矿工就会消耗电能。能量消耗和每个OPCODE难度几乎成正比例。矿工消耗的能量被用GAS(汽油)来计算。根据不同OPCODE的难度,消耗的GAS不同。
    例如 ADD:加法运算 对应3个GAS; DIV:除法运算 对应5个GAS 以此类推。
    所以当一个智能合约代码写好被发布之后,对应的OPCODE也确定了,需要消耗的GAS也确定了。

    到这里先给一个结论:前面观察到的红色感叹号交易出的问题 - GAS(汽油)不足,就是交易发起人提供给矿工的GAS(汽油)不足,不够运行完整个智能合约。

    自己遇到过红色感叹号交易的朋友会发现,交易没有成功,矿工费还被扣走了!好愤怒!是的,因为矿工已经帮你跑了智能合约,只是跑到一半没有油了,他们已经消耗了能量,他们要拿走你提供的哪怕不够的GAS,来补偿自己的能量损耗。

    那么怎么解决呢?

    这里要引入3个概念:Gas Limit, Gas Price & Fees
    我们在以太坊转账交易的时候,不少钱包都会跳出这些设置如Gas Limit(汽油上限), Gas Price(油价)的选项让你选择,或者有的只让你选择Fee(矿工费)。

    只需要输入矿工费的
    高级选项:需要GAS LIMIT和GAS PRICE

    看到这些个图熟悉吗?是不是看到就要晕了?

    很多地方说三者之间的关系是:

    Ether Cost= Tx Fees = Gas Limit * Gas Price

    其实有点偏差,实际的应该是:

    Ether Cost= Tx Fees = Gas Used By Txn * Gas Price

    具体解释一下:
    Gas Limit: 运行一个合约允许的最大消耗的GAS的量。 这个存在是怕万一哪个程序员写了有bug的代码造成全以太坊跑一个死循环,达到GAS Limit就不会再运行程序了,死循环会被终结。
    Gas Price: 交易发起者愿意为这次智能合约运行支付的GAS的单位价格。 价格会根据市场供需关系浮动,不一定的。
    Gas Used By Txn:交易实际消耗掉的GAS的量,对于一个已经发布的智能合约的某个固定功能而言其实是一个定量。 每个智能合约会实际消耗的GAS是不同的,因为程序员写的逻辑有差别~
    Tx Fee:交易手续费/矿工费,用ETH支付。 你看到这里大概也知道了,逻辑是,消耗的GAS的量*单位GAS的价格 = 总价。小学数学出现了~ 那前面不是GAS吗?怎么到付费一下跑出来ETH了?这个现实生活是一样的:你用汽油,汽油有单位价格,付钱用的是美金/人民币。

    这里有个注意点!
    GAS LIMIT控制了矿工最多可以消耗的GAS,如果你转账设置的GAS LIMIT小于实际需要的GAS,那么你的合约运行就会失败,费用被收走。
    如果你的GAS LIMIT远大于实际需要的GAS,那么计算费用的时候使用实际需要的GAS算的,多出来的GAS会退还给你。

    以太坊官方文档的解释

    简单的说怎么做?

    如果你只是进行普通账户转账,不是转账到智能合约,你的矿工费设置可以比较随心,放少一点就是转账慢一点,放多一点就是转账快一点。
    如果你的交易会转账进入智能合约参加ICO,攻略如下:

    1. 直接看官方给的推荐数据:官方推荐多少GAS LIMIT,多少GAS PRICE,就照放,可以保证合约运行完。实在觉得矿工费贵的话,可以调整GAS PRICE,不要动GAS LIMIT! 因为太多了自动退,少了你就跪

    2. 官方没有给数据的,但是已经ICO开始一阵子了,去etherscan上面参考别人的转账信息,例如EOS的ICO:
      一. 打开EOS 合约地址: https://etherscan.io/txs?a=0xd0a6e6c54dbc68db5db3a091b171a77407ff7ccf

      点击VIEW ALL
      二. 点击VIEW ALL,在近期交易中后选一个没有感叹号的成功的交易。你也许会看到很多个成功交易,那选一个你觉得交易费低的进去看看(最右是费用)。
      比如选中这个,点击左边的交易ID进入
      三. 观察交易,找到实际消耗的GAS,即下图中蓝色!的那个数值,51416。这条交易的主人放的GAS上限是90000,比合约运行需要的51416多,合约可以顺利运行成功。下面蓝色的问号标的是单位价格,你可以自己设置,放的高交易就很快被矿工打包,放得低就得等。。如果想知道实时市场价的范围,可以参考这个站点:https://ethgasstation.info/
      具体交易信息
      不妨来做个运算,实际扣掉的ETH是不是正是 51416*29 = 1491064 Gwei = 0.001491064 Ether ($1.19)。
      四. 如果不放心可以重复上述步骤二、三,直到你确认这个合约的ICO需要的GAS值。只要这笔交易是进行ICO的,理论上说在一个时间段内Gas Used By Txn应该是一样的。
      五. 进行钱包转账,用自己调查得到的数据来设置。注意如果IMTOKEN没有跳出高级选项要自己选,GAS LIMIT要比合约需要的Gas Used By Txn来的大,价格按照市场价格或者自己的需求。
    3. 官方没有给参考GAS数据而且ICO还没开始没得参考的:
      搞ICO的团队不给GAS推荐数据好像有点不厚道。。 你可以等ICO一开始马上刷,看别人的成交数据,然后跟着投,或者直接把GAS调的很大,然后等着以太坊退给你多余的GAS.. 只要有任何一个成功的交易,你就有了参考点。

    要注意的是,有的合约可能会有不止一个功能。不同功能需要的GAS不同。

    比如EOSCrowdSale同时支持投ETH和领EOS的功能。对于EOS而言一般输入值是0的是发起领币的动作的交易,那么找几个value 0 Ether的交易来看一看吧:


    image.png

    下图的实际交易是用户发起请求然后领到了21个EOS。消耗的GAS为黄色高光处显示的81253。继续这个过程,再继续看其他的,也发现是81253,那基本就可以确定领EOS最保险的GAS就是大于等于81253啦。


    领EOS的交易

    以上就是最近实验过程总结出来的入坑和跳坑经验。
    欢迎各位前辈指正~ 有偏差我一定马上修正~

    知识是拿来迭代的。:D

    相关文章

      网友评论

        本文标题:用ETH直投lC0的坑| 交易所和GAS设置问题

        本文链接:https://www.haomeiwen.com/subject/gyfnwxtx.html