Я видел много статей в Интернете о пакетных переводах Эфириума, либо это напрямую реализовано в приложении, чтобы вы могли работать с закрытым ключом (а закрытый ключ - это наша жизнь, мы не должны его раскрывать, это дно строчка), или писать пополам, Либо копировать и вставлять чужое, безответственно, прятать и подворачивать, я думаю, это было потому, что я потратил много времени, чтобы понять ETH с нуля, и иногда нам не нужно владеть одним вещь для нужд развития.Просто надо уметь ей пользоваться.Оперативность самое главное,правильно,и вас могут отругать руководители за затягивание процесса из-за оперативности.
Глядя на картинку, это точно то, что вам нужно.Я основываюсь на тесте eth ropsten.Обратите внимание, что требуется FanQiang.Что касается способа FanQiang,я не буду много говорить,вы знаете.RO PS тен.эфир скан.IO/студенты/0 зло 38225...
На рисунке реализовано 3 перевода из формы передачи на несколько адресов в, а фактическое потребление составляет 0,2, а возвращается 0,78. Итак, анализ потребностей завершен, приступим.
Прежде всего, чтобы разработать eth, вы должны сначала понять web3.js.Если вы хотите разрабатывать смарт-контракты, вы должны понимать Solidity.Если вы хотите разрабатывать eth с помощью python, вы должны понимать web3py.Если вы хотите создать частный chain, вы должны понимать geth, сеть Ethereum и паритет. Что касается подробного объяснения, то здесь я не буду многословен, вы искали пакетные переводы, указывая на то, что у вас уже есть определенная основа для разработки.
Что касается компиляции смарт-контрактов Solidity для развертывания в вызов, то мне лень говорить об этом здесь, в интернете есть более подробные туториалы.
Вот набор децентрализованных приложений пакетной передачи с открытым исходным кодом Weiguoren. Существуют подробные реализации кода передачи eth и токена. Вы можете обратиться к нему. Он также имеет подробную документацию и упакован в DAPP для вашего тестирования.GitHub.com/R storm sf/wood…
И это основано на разработке We3.js, Здесь мы в основном говорим о разработке Web3py, для разработки нам нужно тестировать учетные записи, нужен баланс Eth и частные узлы ссылок для соединений WE3.
Я использую здесь Infura of Ropsten Test Network, в качестве тестовой учетной записи, я используюMetamaskПлагины, что касается установки, ну и FanQiang обязателен
ropsten нужно получить тестовые монеты, как их получить
Нажмите на аватарку в правом верхнем углу, чтобы создать учетную запись, или выберите учетную запись по умолчанию, нажмите посередине и выберите тестовую сеть ropsten.
Нажмите кнопку Купить
Нажмите, чтобы получить и не забудьте получить тестовые монеты, по одной, до 5 Хорошо, учетная запись есть, нам также нужен закрытый ключ для передачи
Нажмите на 3 вертикальные точки справа... для просмотра сведений об учетной записи. Затем экспортируйте закрытый ключ
Следующим шагом является использование we3py для реализации операции передачи и непосредственной загрузки кода.
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from web3 import Web3
import json
#这里我使用的是infura的ropsten测试网络
web3 = Web3(Web3.HTTPProvider("https://ropsten.infura.io/v3/cf9f29fb4f674714be8047085920bbd9"))
# Metamask转账账户
fromAddress = web3.toChecksumAddress("0xa22fAF9Ad34c9B7b7dFc1520CBffc3fe4dEe1EE8")
# Metamask账户私钥
private_key = "0x6442818855fd7dc3429351a8c35fee52245a26880e5e0ea638fa69322a9fe781"
# 定义批量转账合约
multiSenderAddr = web3.toChecksumAddress("0xa5025faba6e70b84f74e9b1113e5f7f4e7f4859f")
multiSenderAbi = []
with open("./abis/StormMultisender.json", 'r', encoding='utf8') as data:
multiSenderAbi = json.load(data)
#定义智能合约对象
multi_sender = web3.eth.contract(address=multiSenderAddr, abi=multiSenderAbi)
#取得当前汽体价格
gas_price = web3.eth.gasPrice
# 取得转账账户的交易nonce数据
nonce = web3.eth.getTransactionCount(fromAddress)
# 转账eth
addresses_to_send = ["0x5844de50Cf99F95ca073AC7B205f9C0C75E827A8", "0x8775039fCa840bde05519E4a743B2973F3C30B24"]
balances_to_send = [web3.toWei(0.1, "ether"), web3.toWei(0.1, "ether")]
# 构建交易数据
txn = multi_sender.functions.multisendEther(addresses_to_send, balances_to_send).buildTransaction({
"from": fromAddress,
"gasPrice": web3.toHex(web3.toWei(90, "Gwei")),# 指定汽体价格
"gas": web3.toHex(210000),# 限制使用汽体最大量
"value": web3.toHex(web3.toWei(1, "ether")),# 发送总额必须大于转账金额+手续费否则会打包失败
"nonce": nonce # 防重放nonce,这个是必须的
})
print(txn)
# 发送交易
signed_txn = web3.eth.account.signTransaction(txn, private_key=private_key)
# 发送到网络打包,如果报错 already known 就是上一笔交易正在打包,需要打包完成才能下一笔
web3.eth.sendRawTransaction(signed_txn.rawTransaction)
# 取得转账哈希
txhash = web3.toHex(web3.sha3(signed_txn.rawTransaction))
# 打印交易哈希类似 0xe382252b45073788e015d6d7e3e4847cef540ed24fa0e4c3ec43f8adaf4cd210
print(txhash)
В коде следует отметить, что файл ./abis/StormMultisender.json — это данные ABI, полученные смарт-контрактом, и способ их получения находится в его исходном коде на github.GitHub.com/R storm sf/wood…также черезetherscan ropstenБраузер запрашивает адрес 0xa5025faba6e70b84f74e9b1113e5f7f4e7f4859f для получения ABI контракта.
Следует также отметить, что сумма перевода значения параметра в buildTransaction должна быть больше, чем сумма вашего пакетного перевода плюс комиссия eth, которая может быть использована, иначе пакет не будет выполнен. Следующий код может быть добавлен для расчета потребления газа, которое может быть потреблено до построения данных транзакции txn.
# 构建转账数据
encodedData = multi_sender.encodeABI(fn_name="multisendToken",args=[token_address, addresses_to_send, balances_to_send])
# 取得需要消耗的汽体,这里时灵时不灵,经常报错
gas = web3.eth.estimateGas({
"from": fromAddress,
"data": encodedData,
"value": web3.toHex(web3.toWei(0.1, "ether")),
"to": multiSenderAddr
})
Контракт здесь тестируется с использованием уже развернутого адреса контракта.Если вы заинтересованы в компиляции контракта и развертывании его в Интернете в качестве собственного выделенного контракта, вы можете обратиться к multisender/contracts/flats/UpgradebleStormSender_flat.sol в каталоге исходного кода. этот файл, а затем скопируйте его вremix.ethereum.org/Скомпилируйте и протестируйте, обратитесь к его методам multisendToken и multisendEther