Использование SmartContract отправляет эфир на мультиадрес с одной транзакцией, но он не получает эфир в мультиаккаунте.

Я использовал уже сгенерированный адрес контракта: https://etherscan.io/address/0xb59fdff77a6175dfa4fe7af4281a52f61611eaa2#code

И используя это, я создал ниже код:

// Include the packages
const Web3 = require('web3')
//const abi = require('human-standard-token-abi')
var abi = [{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_tokenAddr","type":"address"},{"name":"dests","type":"address[]"},{"name":"values","type":"uint256[]"}],"name":"multisend","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"type":"function"}];




// Set up Infura as your RPC connection
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));


// Define the contract addresses and the contract instance
const contractAddress = '0xb59fDfF77a6175DFA4fE7aF4281a52f61611eAa2'
//const contract = new web3.eth.contract(abi, contractAddress)

var contractAbi = web3.eth.contract(abi);
var contract = contractAbi.at(contractAddress);
// suppose you want to call a function named myFunction of myContract




fetch('http://localhost:8545', {
    method: 'POST',
    headers: {
        'Accept': 'application/json', 'Content-Type': 'application/json' },
    body: JSON.stringify({ 'method': 'personal_unlockAccount', 'params': ["0x2885f9904f3d1790ba53009bc9e0baae377d67df","kiranmalvi",null], 'id': 1, 'jsonrpc': '2.0' }) })
    .then(function (res) {


        contract.multisend.sendTransaction('0x627306090abaB3A6e1400e9345bC60c78a8BEf57',["0x2885f9904f3d1790ba53009bc9e0baae377d67df","0x7b7cd7d5cee9fb36b7995a3d81df0122a0b1af4a"],["100","200"],{
            from:"0x2885f9904f3d1790ba53009bc9e0baae377d67df",
            gas:4000000 },function (error, result){
            if(!error){
                console.log(result);
            } else{
                console.log(error);
            }
        })

    });

Но транзакция не распределяет несколько адресов, которые я определил. Это только отправка всей суммы по адресу контракта. Можете ли вы помочь мне Что я должен сделать для этого?

Использовались ли ранее термины «мультиадрес» и «мультиаккаунт»? Если да, то где? Если нет, пожалуйста, воздержитесь от использования нестандартных терминов. Они мешают людям понять ваши вопросы.
И похоже, что вам нужна помощь со смарт-контрактом, но вы не включили код для этого контракта.
Я уже поделился кодом smartContact: etherscan.io/address/…
Обсуждение тех же проблем с «многоадресной» терминологией: ethereum.stackexchange.com/questions/41212/…

Ответы (1)

Попробуйте заменить часть извлечения следующим образом.

web3local.personal.unlockAccount(addr, pass);
tokenlocal.multisend(tokenAddress,["0x2885f9904f3d1790ba53009bc9e0baae377d67df","0x7b7cd7d5cee9fb36b7995a3d81df0122a0b1af4a"],["100","200"], { from: addr }, function (err, txHash) {
    if (err) {
        console.error(err);
    }
  if (txHash) {
    console.log(txHash)
  }
})

Изменить Только что проверил ваш код. Несколько замечаний.

  • Вы не отправляете ETH, а отправляете токены
  • Вы не конвертируете количество токенов в их стоимость базовой единицы. например, если количество десятичных знаков вашего токена равно 5, когда вы отправляете 10 токенов, это будет считаться 0,00010. Возможно, вам придется изменить свой смарт-контракт для этого.