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

2,再充币进来

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

额,他居然没有给我拿走,还在充币地址上,可能金额太小,都不够手续费哈哈。。。
好吧,花了几十大洋,也就只知道这个了,毕竟没在交易所做过,不知道具体的机制。。。
好了,单存技术上还是可以写写的,那我们就继续以纯技术角度看看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方法,不过参数更复杂、、

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) #授权转移

网友评论