24 lines
983 B
Python
24 lines
983 B
Python
|
from ethereum import utils
|
||
|
|
||
|
def mk_multisend_code(payments): # expects a dictionary, {address: wei}
|
||
|
kode = b''
|
||
|
for address, wei in payments.items():
|
||
|
kode += b'\x60\x00\x60\x00\x60\x00\x60\x00' # 0 0 0 0
|
||
|
encoded_wei = utils.encode_int(wei) or b'\x00'
|
||
|
kode += utils.ascii_chr(0x5f + len(encoded_wei)) + encoded_wei # value
|
||
|
kode += b'\x73' + utils.normalize_address(address) # to
|
||
|
kode += b'\x60\x00\xf1\x50' # 0 CALL POP
|
||
|
kode += b'\x33\xff' # CALLER SELFDESTRUCT
|
||
|
return kode
|
||
|
|
||
|
def get_multisend_gas(payments):
|
||
|
o = 26002 # 21000 + 2 (CALLER) + 5000 (SELFDESTRUCT)
|
||
|
for address, wei in payments.items():
|
||
|
encoded_wei = utils.encode_int(wei) or b'\x00'
|
||
|
# 20 bytes in txdata for address = 1360
|
||
|
# bytes in txdata for wei = 68 * n
|
||
|
# gas for pushes and pops = 3 * 7 + 2 = 23
|
||
|
# CALL = 9700 + 25000 (possible if new account)
|
||
|
o += 1360 + 68 * len(encoded_wei) + 23 + 34700
|
||
|
return o
|