Tengo un pequeño servicio donde la gente puede intercambiar criptomonedas. Cada usuario tiene su propia dirección de Bitcoin, Litecoin, etc. para el depósito del saldo. Ahora quiero agregar Ethereum. Así que pensé en crear una cuenta para cada usuario y luego verificar las transacciones entrantes. Pero como entendí, no puedo obtener una lista de transacciones de la dirección de la cuenta. esto es raro Incluso en la billetera Mist no veo de dónde viene el éter. La única forma de obtener transacciones es verificar algún explorador de blockchain de terceros.
Además, como entendí, la forma correcta será crear un contrato inteligente, porque tiene la API necesaria. Pero no puedo crear contacto para cada usuario.
Tal vez necesito crear solo 1 contrato que "redireccionará" ether a mi cuenta principal, pero esto no es muy fácil de usar, porque se le pedirá al usuario que agregue algunos datos adicionales a la transacción para que pueda entender quién es quién.
Cualquier consejo será útil.
Si entiendo su pregunta correctamente, desea poder ver quién ha depositado Eth en la dirección de su contrato. Para eso están los registros de eventos.
(1) Cree un contrato donde haya un evento cada vez que haya una transacción. por ejemplo, algo como:
contract someContract {
address public owner;
// Set the owner of the contract to be the creator of the contract i.e. you
function someContract() {
owner = msg.sender;
}
// This is an event
event DepositMade(address _from, uint value);
event WithdrawalMade(address _to, uint value);
//Catch all function
function() {
// generate an event when someone sends you Eth
if (msg.value > 0)
DepositMade(msg.sender, msg.value);
}
// Only the owner of the site can withdraw Eth
modifier admin { if (msg.sender == owner) _ }
function withdraw(uint amount, address recipient) admin {
if(recipient.send(amount))
WithdrawalMade(msg.sender, msg.value);
else throw;
}
}
Los bits importantes son definir un tipo de evento event DepositMade(address _from, uint value)
y generar un evento cuando algo sucede DepositMade(msg.sender, msg.value);
, estos eventos se almacenan en el registro de eventos asociado con la dirección de la instancia de contrato implementada.
(2) Recupera los eventos de este contrato usando rpc eth_newFilter
o , web3.eth.filter
por ejemplo, algo como:
var filter = web3.eth.filter({fromBlock:0, toBlock: 'latest', address: contractAddress, 'topics':['0x' + web3.sha3('DepositMade(hexstring,uint256)')]});
filter.watch(function(error, result) {
if(!error) console.log(result);
})
WithdrawalMade(recipient, amount);
así, ¿no?Puede intentar usar la API GetAccountTransactions de etherchain.org que está documentada en https://etherchain.org/documentation/api/ .
Por ejemplo: https://etherchain.org/api/account/0xbeef281b81d383336aca8b2b067a526227638087/tx/0 le dará las transacciones como se muestra en https://etherchain.org/account/0xbeef281b81d383336aca8b2b067a526227638087#txsent
Etherscan también tiene algunas API documentadas: https://etherscan.io/apis . Aquí está la llamada a la API equivalente para los mismos datos de transacción para la cuenta que la anterior. http://api.etherscan.io/api?module=account&action=txlist&address=0xbeef281b81d383336aca8b2b067a526227638087&sort=asc
Ethplorer proporciona una buena API para muchos casos.
Obtener información de la dirección
niksmac
dmxhZGp1c2hh
ética
jeff
entendido00d
Pavel Niedoba
maljordan
Pavel Niedoba