Importer la valeur d’un autre contrat

Dzeki Novak

Importer la valeur d’un autre contrat


J’essaie de transmettre des valeurs de configuration d’un contrat à un autre, je peux donc les modifier et éviter les frais de transaction.

J’ai deux contrats:

 pragma solidity ^0.4.23; import "./two.sol"; contract One{ string name; constructor() public{ } Two two; function getNameFromOtherContract() public returns(string) { name = two.getName(); return name; } } 

Et deuxieme:

 pragma solidity ^0.4.23; contract Two{ constructor() public{ } function getName() external pure returns (string name) { name = "Amel"; } } 

Quand je cherche getNameFromOtherContract, je reçois:

effectuer une transaction vers One.getNameFromOtherContract erroné: erreur VM: revenir en arrière. revert La transaction est revenue à son état initial.

Quelle serait la syntaxe et la solution correctes pour cette approche?

Jaime

On ne sait pas comment vous prévoyez d’éviter les frais de transaction en utilisant cette approche. Deux n’est pas déployé, ou est-ce?

Réponses


 MSwezey

1) Vous êtes one contrat ne définit pas la variable two à l’adresse du contrat two déployé. C’est pourquoi vous obtenez une erreur de revert .

Rev A) code fixe

 pragma solidity ^0.4.23; import "./Two.sol"; contract One{ string name; Two two; constructor() public{ two = new Two(); } function getNameFromOtherContract() public returns(string) { name = two.getName(); return name; } } 

Rev B (définissant en fait l’adresse du contrat two via le constructeur du contrat one . Remarque: cela nécessite que two soient déployés avant one )

 pragma solidity ^0.4.23; import "./Two.sol"; contract One{ string name; Two two; constructor(address _two) public{ require(_two != address(0)); two = Two(_two); } function getNameFromOtherContract() public returns(string) { name = two.getName(); return name; } } 

2) Je ne sais pas comment vous allez accomplir cette partie: change them and avoid transaction fees. Veuillez expliquer davantage et je serai heureux de vous aider.

Dzeki Novak

J’utiliserai des fonctions d’appel qui ne changent pas d’état, donc aucune transaction ne se produit, ce qui signifie qu’il n’y a pas d’exploration.

MSwezey

call functions which do not change state Cela signifie que vous pouvez lire des variables mais pas les changer. Changer les variables nécessite un changement d’état – qui nécessite un tx.

Dzeki Novak

C’est ça que je veux atteindre

 

#autre, #la, contrat, d’un, importer, valeur

 

yahoo

Laisser un commentaire

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