Intenté enviar ether desde varias direcciones, para eso creé un contrato. El contrato se implementa con éxito en ropsten testnet.
Inicié el servicio en segundo plano usando este comando.
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 implementada del contrato: https://ropsten.etherscan.io/address/0x84265173B2386D674ABA59b35D8C2A77C8A88181
Intenté aplicar send_transaction usando Web3Js pero no pude hacerlo correctamente.
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);
}
})
Por favor, hágame saber lo que está mal en estos pasos. Lo que extrañaba de mi lado. No puedo enviar mi transacción a varias direcciones mediante contrato.
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)
Pero no creo que esté relacionado con el contrato. ¿Me estoy perdiendo algo o voy por el camino equivocado?
Por favor, ayúdenme urgente para que pueda continuar mi trabajo en base a ello.
Está pasando human-standard-token-abi
(que es un contrato ABI ERC20) para crear su Airdrop
contrato que tiene funciones completamente diferentes.
ABI para contrato 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"
}
]
Esa es la ABI a la que debe pasar para web3.eth.contract(abi);
crear una instancia de su objeto de contrato.
kiran malvi
Andrei
if(!error)
de hacer una línea y llamarconsole.log(result); console.log(error);
, ¿alguna de las dos genera algo?kiran malvi
kiran malvi