美文网首页开发碎碎念
转移以太坊ERC20代币-python版

转移以太坊ERC20代币-python版

作者: 十三流 | 来源:发表于2018-01-22 17:55 被阅读2277次

    研究过程中遇到一个问题,如果有人把代币转到交易所的充币地址,交易所是如何将这笔资产转移到交易所的钱包中呢?
    我们都知道所有的资产转移都需要ETH作为旷工费,按现在的价格算,转移一笔资产的价格至少也要50RMB的ETH,但是交易所内的充币地址一般是没有ETH的(除非自己冲过,还没被转走),那么这些代币要靠什么做gas呢?

    为了弄清这个问题,我到zb上买几个EOS,先提到自己的钱包,再充币进去看看
    1,买了3个EOS,提币到钱包


    血亏,买了3个,手续费扣了1个

    2,再充币进来


    图片.png
    3,过了2天到区块浏览器上瞄了一眼
    图片.png

    额,他居然没有给我拿走,还在充币地址上,可能金额太小,都不够手续费哈哈。。。
    好吧,花了几十大洋,也就只知道这个了,毕竟没在交易所做过,不知道具体的机制。。。
    好了,单存技术上还是可以写写的,那我们就继续以纯技术角度看看python如何转移代币

    地址有ETH,直接转移

    这应该是最直接的转移方法了,前提是账号同时有ETH做gas,没有的话就转一点过来吧,我也不知道有啥好方法,其实也就是调用合约的transfter方法了

    from web3 import Web3
    web3=Web3(HTTPProvider(...))
    contract=web3.eth.contract(abi,address)
    web3.personal.unlockAccount(from_address,passphrase,60)
    contract.transact({'from':from_address, 'gas': 90000}).transfer(to_address,amount_of_token)
    
    代币转移示例

    也可以使用sendTransaction方法,不过参数更复杂、、


    图片.png

    ERC20的Approve和TransferFrom

    这个是ERC20标准中提出的,授权给某个地址,可以让那个地址转移本地址的代币,授权后,gas由授权账号付,自己可以没有eth,但是授权这一步还是要消耗gas。。,好处就是授权后只要没有超出限额,充币地址就不用gas了,对交易所还是全部转走比较好~~

    contract.transact({'from':sub_address, 'gas': 90000}).approve(gas_address,amount_of_token) #授权gas_address可以从sub_address转移amount_of_token的代币
    contract.transact({'from':gas_address, 'gas': 90000}).transferFrom(sub_address,wallet_address,1) #授权转移
    
    使用transferfrom后,授权额变少了

    相关文章

      网友评论

        本文标题:转移以太坊ERC20代币-python版

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