一直對交易所的錢包很好奇砚蓬,我在交易所買了有ETH,但是充值地址顯示金額是0盆色,后面想了想也是灰蛙,我即時買賣,資產(chǎn)中的充值地址不可能與我的余額關(guān)聯(lián)起來隔躲,大概想了想缕允,交易所應(yīng)該是這個流程
1,買賣只是記賬蹭越,不涉及實際區(qū)塊金額
2,充值是充值到一個地址教届,一旦充值到賬响鹃,交易所會將這筆錢轉(zhuǎn)到自己的冷錢包或熱錢包
3驾霜,提現(xiàn)后是從交易所的熱錢包打出
試了一下web3.py對接以太坊的錢包,過程也算比較簡單
1买置,啟動geth服務(wù)
啟動時一定要加上personal api粪糙,不然在對用戶操作時會報找不到personal的方法
--rpcapi="db,eth,net,web3,personal,web3"
2,讀取區(qū)塊數(shù)據(jù)
查看指定區(qū)塊的數(shù)據(jù)忿项,transactions字段即全部的交易hash
>>> web3.eth.getBlock(1000000)
AttributeDict({u'nonce': u'0xcd4c55b941cf9015', u'transactionsRoot': u'0x65ba887fcb0826f616d01f736c1d2d677bcabde2f7fc25aa91cfbc0b3bad5cb3', u'hash': u'0x8e38b4dbf6b11fcc3b9dee84fb7986e29ca0a02cecd8977c161ff7333329681e', u'uncles': [], u'sha3Uncles': u'0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', u'timestamp': 1455404053, u'receiptsRoot': u'0x20e3534540caf16378e6e86a2bf1236d9f876d3218fbc03958e6db1c634b2333', u'number': 1000000, u'difficulty': 12549332509227, u'size': 768, u'miner': u'0x2a65aca4d5fc5b5c859090a6c34d164135398226', u'mixHash': u'0x92c4129a0ae2361b452a9edeece55c12eceeab866316195e3d87fc1b005b6645', u'parentHash': u'0xb4fbadf8ea452b139718e2700dc1135cfc81145031c84b7ab27cd710394f7b38', u'extraData': u'0xd783010303844765746887676f312e352e31856c696e7578', u'gasLimit': 3141592, u'stateRoot': u'0x0e066f3c2297a5cb300593052617d1bca5946f0caa0635fdb1b85ac7e5236f34', u'transactions': [u'0xea1093d492a1dcb1bef708f771a99a96ff05dcab81ca76c31940300177fcf49f', u'0xe9e91f1ee4b56c0df2e9f06c2b8c27c6076195a88a7b8537ba8313d80e6f124e'], u'totalDifficulty': 7135202464334937706, u'gasUsed': 50244, u'logsBloom': u'0x00000000000000000000000000000000000800000000000000000000000800000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000'})
根據(jù)指定的hash查找事務(wù)詳情蓉冈,from-原始地址 to-目標(biāo)地址 value-金額 (單位Wei)
>>> web3.eth.getTransaction('0xea1093d492a1dcb1bef708f771a99a96ff05dcab81ca76c31940300177fcf49f')
AttributeDict({u'nonce': 21, u'from': u'0x39fA8c5f2793459D6622857E7D9FbB4BD91766d3', u'blockHash': u'0x8e38b4dbf6b11fcc3b9dee84fb7986e29ca0a02cecd8977c161ff7333329681e', u'gas': 129244, u'value': 100000000000000000000L, u'blockNumber': 1000000, u'to': u'0xc083e9947Cf02b8FfC7D3090AE9AEA72DF98FD47', u's': u'0x30b7835ba481955b20193a703ebc5fdffeab081d63117199040cdf5a91c68765', u'r': u'0xa254fe085f721c2abe00a2cd244110bfc0df5f4f25461c85d8ab75ebac11eb10', u'gasPrice': 80525500000, u'v': u'0x1c', u'input': u'0x', u'transactionIndex': 0, u'hash': u'0xea1093d492a1dcb1bef708f771a99a96ff05dcab81ca76c31940300177fcf49f'})
這里我們就知道有沒有交易所地址產(chǎn)生交易了。
3轩触,到賬確認(rèn)
一般區(qū)塊是需要到達(dá)指定的確認(rèn)數(shù)才給入賬的寞酿,這里我不是太明白,是不是有可能收到的塊是無效塊脱柱,被其他分支沖掉伐弹,不過如果按照6個確認(rèn)數(shù)來,應(yīng)該問題不大榨为,將2中的hash保存惨好,超過6個塊后還能查到,應(yīng)該就可以確認(rèn)了随闺,發(fā)起轉(zhuǎn)到熱錢包的事務(wù)日川,然后給用戶入賬。
遺留問題:
在調(diào)用web3.eth.getTransaction時矩乐,發(fā)現(xiàn)部分交易的to是空的龄句,不知道是不是合約地址,改日再研究一下绰精。
PS:有個問題理解的不對撒璧,一開始認(rèn)為我們充幣到交易所的充幣地址后,交易所就將該幣轉(zhuǎn)移到冷錢包或熱錢包了笨使,后來實際觀察了一下2個交易所卿樱,都沒有動這個數(shù)量,我猜應(yīng)該是金額太小硫椰,為了解決區(qū)塊轉(zhuǎn)賬成本繁调,要等一個地址達(dá)到一定的額度才會提走,有做交易所的朋友可以指正一下靶草。