Mon travail Dapp sur le testnet privé mais pas dans le public

Tommaso Giubilei

Mon travail Dapp sur le testnet privé mais pas dans le public


J’ai créé ce simple Dapp et cela fonctionne bien dans la machine virtuelle testnet et java privée à l’intérieur de Remix et à l’extérieur en utilisant une interface Web. Le problème vient quand il sera utilisé dans le testnet « public » (Ropsten). Il envoie la transaction et exécute la fonction mais n’envoie jamais l’éther du contrat à l’adresse. J’ai déjà défini la valeur du contrat à la valeur correcte.

Désolé pour mon mauvais anglais

 pragma solidity ^0.4.0; contract DApp { uint256 acconto; uint256 saldo; address committent; address technician; bool done = false; uint timeFinish; modifier onlyCom { if (msg.sender != committent) { assert(true); } else { _; } } function DApp (uint256 _acconto, uint256 _saldo, address _technician, uint _Time) payable public { if (msg.value >= _acconto + _saldo) { acconto = _acconto * 1000000000000000000; saldo = _saldo * 1000000000000000000; committent = msg.sender; technician = _technician; timeFinish = block.timestamp + _Time; technician.transfer(acconto); } else revert(); } function Done () public onlyCom { done = true; } function reciveReward () payable public { if(done == true) { technician.transfer(saldo); selfdestruct(this); } else { if(block.timestamp >= timeFinish) { committent.transfer(saldo); selfdestruct(this); } assert(true); } } } 

Edit: Voici comment cela devrait fonctionner: entrez la description de l'image ici J’écris les données de la transaction

entrez la description de l'image ici Sur la photo j’ai mis la valeur du contrat avec une erreur, je vais la corriger sur la dernière photo. Fondamentalement, le déployeur paie maintenant 4 éther + coût de transaction. L ‘ »acconto » va directement à l’adresse du technicien. Le reste reste dans le contrat.

entrez la description de l'image ici C’est le changement d’argent (dans le premier essai, seule la première partie du contrat a bien fonctionné car la valeur n’était pas suffisante)

entrez la description de l'image ici J’ai refait toute la transaction lors de l’appel de receiveReward, la partie restante va au technicien et tout a fonctionné comme je le voulais.

Pourquoi dans le Ropsten Test Net ça ne marche pas? Ça n’envoie pas d’éther ou est-ce que je regarde dans la mauvaise direction?

cAos

sembra scritto male di proposito

Tommaso Giubilei

@siid scusa se non posseggo il tuo livello di inglese, 🙁

cAos

Non mi riferivo all’inglese

Tommaso Giubilei

@siid a cosa allora?

cAos

solidité du codice

Réponses


 cAos

Essayez ceci, devrait être logiquement identique. J’ai trouvé quelques erreurs de syntaxe:

 pragma solidity ^0.4.0; contract DApp { uint256 acconto; uint256 saldo; address committent; address technician; bool started; uint256 timeFinish; modifier onlyCom() { require(msg.sender == committent); _; } modifier onlyAfter(uint _time) { require(now > _time); _; } constructor (uint256 _acconto, uint256 _saldo, address _technician) public { technician = _technician; committent = msg.sender; acconto = _acconto; saldo = _saldo; started = false; } function start(uint256 _time) public onlyCom() payable { require(started == false); require(msg.value >= acconto + saldo); started = true; timeFinish = now + _time; technician.transfer(acconto); } function good() public onlyCom() { selfdestruct(technician); } function bad() public onlyCom() onlyAfter(timeFinish) { selfdestruct(committent); } } 
Tommaso Giubilei

L’acconto & saldo est maintenant en éther ou wei, car il ne se multiplie pas pour rien. L ‘acconto e il saldo ora sono in ether o wei, perché non è moltiplicato per nulla come nel mio programma … Lo devo poi moltiplicare nell’ interfaccia con web3?

cAos

secondo me conviene, si

Tommaso Giubilei

Funziona, grazie mille


 Ismael

Quelques problèmes qui apparaissent lors du passage d’un testnet privé à un réseau public:

  • Pas assez de gaz. Certains IDE et portefeuille peuvent estimer la valeur correcte de gaz requise par une transaction, mais lorsque votre programme crée la transaction, il utilise une valeur par défaut qui peut ne pas être suffisante (elle était auparavant de 100 000).

  • Prix ​​du gaz trop bas. Dans un testnet privé, le prix est souvent fixe et toutes les transactions seront traitées. Dans un testnet public, le prix du gaz fluctuera avec la demande. Un prix bas du gaz peut entraîner l’extraction d’une transaction plus longue.

  • Ne pas attendre la confirmation de la transaction. Dans un testnet privé, les transactions sont confirmées rapidement, mais dans un réseau public, votre transaction doit rivaliser avec d’autres transactions en attente pour l’espace en blocs. Cela peut prendre plusieurs blocs avant que votre transaction ne soit confirmée, et jusqu’à ce que votre contrat ne reflète pas les modifications apportées à la transaction.

Tommaso Giubilei

J’ai vérifié tout cela plusieurs fois mais cela ne fonctionne toujours pas. Que puis-je faire? Désolé pour mon mauvais anglais

Ismael

Avez-vous l’ID de transaction en cas d’échec? Il semble que vos paramètres _acconto , _saldo soient dans des éthers et vous les comparez avec msg.value qui est dans wei. Il est donc possible que vous envoyiez au contrat moins d’éthers que nécessaire.

Tommaso Giubilei

Je pense que c’est le numéro de transaction, mais m « Je ne sais pas .. création du contrat: 0xbc63d42af64ce272a0b7517ba2daa50c579af5f7d2bae66de00672474f12fba2 Fonction disgnostic 0x66d260e9a37346998aee63657ad5fca7b5d3ccec71f8130ec7504316dc89c542 ReceiveReward: Ce 0xc12456396112c9e241700c99927a442655e69b4671aac89db4866bb6fc148838 est le test de testnet, celui de la photo est sur une machine virtuelle. Testnet Ropsten. Désolé pour mon mauvais anglais

Ismael

Le problème avec ces transactions est que lorsque vous créez le contrat, vous définissez _acconto et _saldo sur zéro. Lorsque vous appelez ReceiveReward() il transfère saldo à l’adresse du technicien (mais c’est zéro!), Puis il se détruit automatiquement et il ignore les appels ultérieurs.

Tommaso Giubilei

Pourquoi il l’a mis à zéro? Je multiplie la valeur wei pour 10 ^ 18 … Je ne comprends pas pourquoi il l’a mis à 0. Mais j’espère que je sais que ce n’est pas un problème ultérieur mais un problème de constructeur. Merci pour l’aide

 

#pas, dans, DApp?, Le, mais, mon, privé, public, sur, testnet, travail

 

yahoo

Laisser un commentaire

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