Retardateur dans le contrat intelligent [doublon]

Jorikas

Retardateur dans le contrat intelligent [doublon]


Cette question a déjà une réponse ici:

Je veux ajouter une chose à mon contrat où toutes les 10 minutes tous les ETH d’un contrat sont envoyés à mon portefeuille. Je ne sais pas comment faire. Toute aide appréciée

Réponses


 voler

Il n’y a aucun moyen d’avoir des minuteries dans les contrats intelligents. Vous devrez écrire un script hors chaîne qui envoie une transaction au contrat lui demandant de se retirer. Alternativement, vous pouvez simplement envoyer tous les paiements au contrat à votre adresse.

Jorikas

Eh bien, je pense à quelque chose comme une loterie – le contrat reçoit de l’argent et à une date précise envoie tout l’argent à une personne au hasard. Le problème est que la loterie se déroulerait comme toutes les 10 minutes. Merci pour votre réponse, mais n’y a-t-il même pas moyen d’obtenir du temps à partir d’un serveur externe ou quelque chose?

voler

Le contrat peut obtenir l’heure actuelle de lui-même, il n’a pas besoin d’obtenir l’heure d’un serveur externe. Mais le contrat doit être exécuté par une transaction.

Jorikas

Ok merci, je vais travailler avec ça 🙂 voterait mais je n’ai pas de représentant 🙂

voler

Pas de problème (: N’hésitez pas à m’envoyer un message sur gitter @flygoing si vous avez d’autres questions

Andromelus

Ouais, je sais, mais je voulais avertir les gens qui ne le savent pas;)


 Jaime

Il existe un moyen de le faire.

Le contrat peut obtenir l’heure directement mais ne peut pas s’exécuter lui-même.

Vous pouvez utiliser des services comme Chronos , qui vous permet de planifier des appels à votre contrat de manière simple. Vous trouverez des exemples sur la façon de faire exactement ce que vous demandez ici, regardez les exemples. Cela peut être utilisé sur Rinkeby pour les tests. Vous pouvez, par exemple, demander que votre contrat soit appelé tous les N blocs.

D’autres services sont également disponibles, comme Oraclize et réveil ethereum

Exemple de comment faire ce que vous avez demandé en utilisant Chronos (le solde du contrat devrait être suffisant pour payer le gaz ou vous pouvez pré-facturer votre adresse de contrat en utilisant les fonctions de Chronos, vous pouvez toujours récupérer ce que vous n’utilisez pas):

 pragma solidity ^0.4.20; contract _Chronos { function registerCall(address contractAddress, uint256 callOnBlock, uint256 gasAmount) public returns (uint256); function clientWithdraw(uint256 value) public; function clientFunding(address contractAddress) public payable; } contract Client { function setCallrequest(uint256 blockNumber, uint256 gasAmount) public; function callBack() public; function withdrawFromChronos(uint value) public; function getDepositsFromChronos() public payable; } contract YourContract is Client { address public chronosAddress; address public admin; function YourContract() public { chronosAddress = address(0x4896FE22970B06b778592F9d56F7003799E7400f); admin = msg.sender; } function setCallrequest(uint256 blockNumber, uint256 gasAmount) public { _Chronos ChronosInstance = _Chronos(chronosAddress); uint256 costs = ChronosInstance.registerCall(address(this), blockNumber, gasAmount); require(address(this).balance >= costs); ChronosInstance.clientFunding.value(costs)(address(this)); } function callBack() public { setCallrequest(block.number + 40, 200000); // 40 indicated how many blocks to wait to receive the call, 40 blocks * 15sec/block = 600 sec = 10 min admin.transfer(this.balance); // you may want to leave some ether in your contract to pay for the next call. The gas used is small but is not zero, in this example 200000 gas is passed. If this is not consumed the contract will save it and you can withdraw what you do not use. if the gas you pass is not enough the call is not executed. } function () public payable {} } 

Avertissement: j’ai écrit le code de Chronos.

Faites-moi savoir si cela fonctionne pour vous. J’espère que cela aide

Jorikas

Merci. Je n’ai pas actuellement les trucs de développement. Je veux juste développer pour cette loterie spécifique, donc ça va prendre du temps à faire. Merci 🙂

Jaime

vous n’avez pas besoin de développer autre chose, le code que je montre fait ce que vous avez demandé, vous pouvez ajouter toutes vos autres fonctions à ce contrat, faites-moi savoir si je peux vous aider.

 

[doublon], contrat, dans, intelligent, Le, Retardateur

 

yahoo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *