美文网首页比特币&区块链研究程序员
ETC转到ETH地址以及转币进ETH智能合约账户能不能转出来?

ETC转到ETH地址以及转币进ETH智能合约账户能不能转出来?

作者: 1a8661c5a646 | 来源:发表于2018-05-17 08:26 被阅读161次

第0章 引言

如果ETC充值到了ETH地址上,能找回来吗?答案是不一定。

ETH转到别的ETH地址上,也是有可能再也弄不出来的。

第1章 以太坊的两类账户

以太坊有两类账户,外部账户和合约账户。

外部账户是由公钥和私钥组成的。我们绝大多数用户生产的以太坊钱包都属于这一类账户,私钥可以决定这个账户里的币,包括以太坊和ERC20币。

合约账户是由一个地址和对应存储的一些代码组成的。在以太坊上发ERC20币,就是创建了一个合约账户。存储在合约里的代码决定了这个地址里的币。

合约账户没有私钥!!!

第2章 如果ETC转币转到了ETH地址上

往交易所充值,偶偶会出现将ETC和ETH充错的时候。

一般情况,如果你将ETC充值到了一个ETH地址上,你只需要将ETH地址对应的私钥导入到ETC钱包,就可以找回充错的ETC。但如果这个ETH地址是一个智能合约,那是无法通过出私钥的方式来找回。因为合约账户就没有私钥。

如果这个智能合约的代码没有规定好如何处理进入的币,那就没有办法转出这些ETC了。如果这个智能合约部署好了如何处理里面的币的代码,这个暂时我还没学会如何处理这些转错的ETC,即有可能有办法取回,也有可能没有办法。我学会后再来补充。

第3章 ETH合约账户收款函数和取款函数

以太坊的合约账户是需要部署好收款函数后,才能收款。比如EOS的合约地址是这个0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0,https://etherscan.io/address/0xd0a6e6c54dbc68db5db3a091b171a77407ff7ccf#code 下面这个函数是EOS智能合约的收款函数:

如果合约账户想转出账户里的币,那一定得部署好取款函数,比如下面这个函数是EOS智能合约的取款函数:

如果智能合约没有部署存款函数,则不能存入币,如果没有部署取款函数,则提不出来币。一般是不会没有存款函数的。

合约里的代码写好了,绝大多数情况下是无法修改的,这就是区块链的不可篡改特性。但高级的程序员可以写出可以合法修改规则的合约,这个有点复杂。

如果你知道前一段时间的蔡文胜搞的美链BEC,和更早的SMT这两个token,都出了事故,被人刷出无限的token。但这个没有办法修正,他们采用的办法就是直接再发一个token,名字一模一样,然后给原来的用户按1:1派发。

第4章 交易所使用智能合约来提现ETH

有些交易所,如bitstamp是使用合约账户来让用记提ETH的,这种提币很多钱包就不会显示,在区块链浏览器 https://etherscan.io 里转账记录是收录在Internal Transactions里。

很多朋友使用这样的智能合约提现提到另一个交易所,经常很久不能自动到账。比如你从bitstamp提现ETH到otcbtc,就无法自动到账。这就属于充值的这个交易所的合约没有部署到这种情况。

我以前从bitstamp提现了一笔ETH到imtoken里,发现imtoken可以显示余额,但无法查到转账记录。这也是imtoken没有写好处理这种从合约账户里来的交易。

第5章 有些用户自己发了ERC20并往合约地址里面转币

我在小密圈里收到一位用户的咨询,他用网上的教程在以太坊上发了一个ERC20币。然后不小心往这个合约账户里转了其他代币,咨询如何取出来。

因为很多用户自己发部署智能合约发币时,使用的都是网上的模板教程,改改参数就发了。很多模板根本就没有写收款函数,也没写取款函数。最倒霉的是写了收款函数,没写取款函数的模板。这一类模板,你转其他币进这个合约地址里就坑爹了,取不出来了。

发币有风险,操作需谨慎啊。

第6章 结束语

以太坊好复杂,我为了搞明白上述问题花了好几天时间,请教了n多人。(特别感谢viabtc杨敏,比太文浩和Tony东林回答了我这么多问题。)

另请阅读:

《比特币(包括BTC和BCH)的零确认到底安不安全?》

相关文章

网友评论

  • Maia玛雅:我也是小白一枚,虽然有计算机背景,也是要理解好久,谢谢您的分享,我会持续关注的。

本文标题:ETC转到ETH地址以及转币进ETH智能合约账户能不能转出来?

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