Пробовал отправить эфир с мультиадреса, для этого создал один контракт. Контракт успешно развернут в тестовой сети ropsten.
Я запустил службу в фоновом режиме с помощью этой команды.
parity --warp --chain ropsten --rpcapi 'eth,net,web3,personal'
pragma solidity ^0.4.20;
contract ERC20 {
function transfer(address _recipient, uint256 _value) public returns (bool success);
}
contract Airdrop {
function drop(ERC20 token, address[] recipients, uint256[] values) public {
for (uint256 i = 0; i < recipients.length; i++) {
token.transfer(recipients[i], values[i]);
}
}
}
URL-адрес развернутого контракта: https://ropsten.etherscan.io/address/0x84265173B2386D674ABA59b35D8C2A77C8A88181
Пытался применить send_transaction с помощью Web3Js, но не смог добиться успеха.
const Web3 = require('web3')
const abi = require('human-standard-token-abi')
const web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
// Define the contract addresses and the contract instance
const contractAddress = '0x84265173B2386D674ABA59b35D8C2A77C8A88181'
//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
/*console.log(web3.eth.accounts[0]);
return false;*/
contract.drop.sendTransaction('0x627306090abaB3A6e1400e9345bC60c78a8BEf57',["0x2885f9904f3d1790ba53009bc9e0baae377d67df","0x7b7cd7d5cee9fb36b7995a3d81df0122a0b1af4a"],[100,200],{
from:web3.eth.accounts[0],
gas:4000000},function (error, result){ //get callback from function which is your transaction key
if(!error){
console.log(result);
} else{
console.log(error);
}
})
Пожалуйста, дайте мне знать, что не так в этом шаге. Что я пропустил со своей стороны. Я не могу отправить свою транзакцию на мультиадрес, используя контракт.
TypeError: name.match is not a function
at SolidityTypeAddress.isType (/var/www/html/BlockChain/parity/node_modules/web3/lib/solidity/address.js:23:19)
at /var/www/html/BlockChain/parity/node_modules/web3/lib/solidity/coder.js:57:18
at Array.filter (<anonymous>)
at SolidityCoder._requireType (/var/www/html/BlockChain/parity/node_modules/web3/lib/solidity/coder.js:56:36)
at /var/www/html/BlockChain/parity/node_modules/web3/lib/solidity/coder.js:231:21
at Array.map (<anonymous>)
at SolidityCoder.getSolidityTypes (/var/www/html/BlockChain/parity/node_modules/web3/lib/solidity/coder.js:230:18)
at SolidityCoder.encodeParams (/var/www/html/BlockChain/parity/node_modules/web3/lib/solidity/coder.js:88:30)
at SolidityFunction.toPayload (/var/www/html/BlockChain/parity/node_modules/web3/lib/web3/function.js:92:52)
at SolidityFunction.sendTransaction (/var/www/html/BlockChain/parity/node_modules/web3/lib/web3/function.js:163:24)
Но я не думаю, что это связано с контрактом. Я что-то упускаю или иду не тем путем?
Пожалуйста, помогите мне срочно, чтобы я мог продолжить свою работу на основе этого.
Вы проходите human-standard-token-abi
(который является ABI контракта ERC20), чтобы создать свой Airdrop
контракт, который имеет совершенно другие функции.
ABI для контракта Airdrop:
[
{
"constant": false,
"inputs": [
{
"name": "token",
"type": "address"
},
{
"name": "recipients",
"type": "address[]"
},
{
"name": "values",
"type": "uint256[]"
}
],
"name": "drop",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
]
Это ABI, к которому вам нужно перейти, web3.eth.contract(abi);
чтобы создать экземпляр вашего объекта контракта.
Киран Мальви
Андрей
if(!error)
того, как сделать линию и позвонитьconsole.log(result); console.log(error);
- что-нибудь выводит?Киран Мальви
Киран Мальви