Exécuter un contrat
Vous pouvez utiliser Blockchain App Builder pour interroger un jeton déployé ou un proxy de compte/identité, ou pour appeler une fonction de contrat changeant d'état.
Après avoir compilé un projet, vous pouvez utiliser l'onglet Exécuter du formulaire Déployer/exécuter pour interroger ou appeler des fonctions. L'extension lit le contrat sélectionné ABI, présente les fonctions disponibles, encode les paramètres et envoie la demande via le transport approprié pour l'environnement sélectionné. Pour les projets composés, déployez et activez les proxies de jeton et de compte avant de tenter des opérations de changement d'état de jeton.
- Ouvrez la vue Contrats.
- Sélectionnez le projet Hardhat, puis ouvrez Déployer / Exécuter.
- Sélectionnez l'onglet Exécuter.
- Si le formulaire inclut un sélecteur de projet, choisissez le projet propriétaire du contrat et ses artefacts compilés.
Vous devez renseigner les champs suivants pour sélectionner une cible et une fonction avant d'exécuter un appel.
- Jeton : contrat de jeton compilé dont vous souhaitez utiliser l'ABI.
- Cible d'appel : sélectionnez Jeton pour appeler le proxy de jeton ou Compte/Identité pour appeler le proxy de compte associé. Sélectionnez Jeton comme cible d'appel pour le comportement de jeton, tel que les soldes, l'extraction, les transferts, la configuration et les opérations de classe de ressource. Sélectionnez Compte/Identité pour les fonctions d'identité, d'autorisation ou de stratégie du contrat de compte associé.
- ABI cible : ABI utilisé pour répertorier et encoder les fonctions. Un manifeste généré verrouille le compte couplé ABI ; sinon, sélectionnez-en un manuellement.
- toAddress : adresse du proxy déployé pour la cible sélectionnée. Ne saisissez pas d'adresse de bibliothèque d'assistance ou d'implémentation.
- Environnement : environnement dans lequel ce proxy est déployé.
- Fonction : fonction ABI à interroger ou appeler. La liste inclut l'origine de la fonction pour aider à distinguer les capacités héritées.
Chemin d'exécution
L'extension choisit ou restreint le mode disponible en fonction de l'environnement que vous sélectionnez.
| Environnement et mode API | Comportement de la requête | Comportement d'appel | Informations sur le signataire requises |
|---|---|---|---|
| Noeud local Hardhat ou Autre EVM avec JSON-RPC | Appelle le noeud en utilisant la clé privée locale sélectionnée en tant que from.
|
Signe et diffuse directement via JSON-RPC. | Compte d'appelant configuré ou clé privée de 32 octets saisie manuellement. |
| Oracle Blockchain Platform Besu avec les API JSON-RPC | Appelle l'adresse JSON-RPC Oracle Blockchain Platform à l'aide de l'adresse de compte Wallet Service sélectionnée en tant que from.
|
Crée une transaction, demande une signature de service de portefeuille, puis la diffuse via Oracle Blockchain Platform JSON-RPC. | URL de signature de service de portefeuille, JSON de comptes, jeton d'autorisation et compte de portefeuille sélectionné. |
| Oracle Blockchain Platform Besu avec API REST rpc-proxy | Publication dans l'API de requête Oracle Blockchain Platform. | Publication dans l'API de transaction Oracle Blockchain Platform. | Adresse de l'expéditeur ; paramètres d'attente de gaz et de réception facultatifs. Aucun signataire de clé privée locale ou de service de portefeuille n'est entré dans ce mode. |
Le mode rpc-proxy REST n'est disponible que pour un environnement Oracle Blockchain Platform Besu. Les paramètres d'hôte d'URL RPC, de jeton d'authentification et de TLS de l'environnement sont utilisés pour les appels REST. D'autres environnements EVM et Hardhat locaux utilisent le format JSON-RPC avec signature locale.
Interroger une fonction
Utilisez Requête pour un appel en lecture ou pour simuler une fonction par rapport à l'état de la chaîne en cours.
- Sélectionnez la cible, l'environnement, la fonction et les paramètres.
- Configurez les informations de l'appelant ou du portefeuille requises par le chemin d'exécution sélectionné.
- Sélectionnez Interroger.
- Vérifiez le champ Sortie. La sortie JSON-RPC inclut le résultat d'appel brut et le résultat ABI décodé lorsque le décodage réussit. La sortie REST inclut la réponse d'API.
Les requêtes utilisent une demande d'appel ; elles ne diffusent pas de transaction ni d'état persistant. Une requête peut toujours être annulée si les conditions de la fonction sélectionnée, les autorisations de l'appelant ou les paramètres fournis ne sont pas valides pour l'état actuel du contrat.
Appeler une fonction
- Sélectionnez la cible, l'environnement, la fonction et les paramètres.
- Configurez la méthode de signature requise.
- Pour Autre EVM ou Noeud local Hardhat, sélectionnez un compte d'appelant configuré ou entrez la clé privée autorisée.
- Pour Oracle Blockchain Platform Wallet Service, indiquez l'URL de signature, les comptes JSON et le jeton d'autorisation, puis sélectionnez le compte de portefeuille.
- Pour REST rpc-proxy, entrez l'adresse de l'expéditeur et, si nécessaire, les paramètres de limite de gaz et d'attente de réception.
- Sélectionnez Appeler.
- Attendez le résultat en sortie. Les appels de service JSON-RPC et de portefeuille réussis incluent le hachage de transaction, le numéro de bloc, le gaz utilisé, l'expéditeur, la cible et le statut de réception.
Saisir des paramètres
Pour ouvrir l'éditeur de paramètres, cliquez sur le bouton … en regard de Paramètres. Il affiche le nom du paramètre ABI, la propriété imbriquée, le type et un champ d'entrée. Sélectionnez l'action d'application de l'éditeur pour générer le tableau de paramètres JSON qui sera utilisé par la fonction Exécuter.
Les paramètres sont envoyés sous la forme d'un tableau JSON dans le même ordre que les entrées ABI de la fonction sélectionnée.
| Entrée ABI | Paramètre collable JSON |
|---|---|
| Aucune saisie | [] |
balanceOf(address) |
["0x1111111111111111111111111111111111111111"] |
transfer(address,uint256) |
["0x1111111111111111111111111111111111111111", "1000"] |
| Un seul tuple | [{"fieldA":"value","fieldB":"1000"}] |
Une entrée tuple[] autonome
|
[[{"userAddress":"0x1111111111111111111111111111111111111111","approvalSequence":1}]] |
Pour les champs ABI entiers, entrez une chaîne décimale telle que "1000" afin d'éviter la perte de précision numérique JavaScript. Utilisez JSON true ou false pour les valeurs booléennes. Les adresses doivent être des adresses 0x valides.
Pour les tuples et les entrées de tableau tuple, utilisez des objets JSON nommés dont les noms de propriété correspondent aux noms de composant ABI. N'utilisez pas la syntaxe de tuple positionnel Solidity dans l'éditeur de paramètres.
Par exemple, lorsque l'éditeur affiche une propriété approverDetails tuple[] avec les composants userAddress et approvalSequence, collez la valeur suivante dans l'éditeur JSON de cette propriété :
[
{
"userAddress": "0x1111111111111111111111111111111111111111",
"approvalSequence": 1
}
]L'éditeur de paramètres place cette valeur dans le tableau d'argument de fonction externe. Pour un tuple complet, entrez tous les composants affichés par l'ABI sélectionné. Les champs exacts varient selon la version du contrat. Par conséquent, utilisez les propriétés affichées dans l'éditeur de paramètres plutôt que de copier une forme de tuple à partir d'un autre projet de jeton.
Format d'entrée du service de portefeuille
Pour le mode JSON-RPC d'Oracle Blockchain Platform, entrez les comptes de service de portefeuille en tant que tableau JSON. Chaque entrée doit avoir une adresse et peut inclure un ID de portefeuille comme indiqué dans l'exemple suivant.
[
{
"address": "0x1111111111111111111111111111111111111111",
"walletId": "0x1111111111111111111111111111111111111111"
}
]Sélectionnez l'un des comptes analysés dans Compte de portefeuille. Les requêtes utilisent son adresse comme from ; les appels demandent au service de portefeuille de signer pour ce compte. Le jeton d'autorisation du service de portefeuille n'est pas stocké dans le brouillon enregistré du formulaire.
Enregistrer et réutiliser les entrées
Sélectionnez Enregistrer l'entrée pour conserver les sélections d'exécution non secrète en cours et le paramètre JSON pour le projet. Sélectionnez Effacer l'entrée enregistrée pour enlever l'état du formulaire enregistré. Vérifiez à nouveau les adresses proxy, la fonction sélectionnée et les paramètres avant un appel. Les entrées enregistrées ne prouvent pas qu'une cible est toujours déployée dans l'environnement actuellement sélectionné.
Dépannage
| Condition | Résolution |
|---|---|
| Après une mise à niveau, aucune méthode nouvellement ajoutée n'est répertoriée dans la liste ABI sur la page Exécuter. | Mettez à jour le fichier manifeste Blockchain App Builder (generated.manifest.json) pour modifier contractClassName et contractRelativePath afin de pointer vers le nouveau contrat mis à niveau.
|
| Aucune fonction ABI trouvée | Compilez le projet et vérifiez que l'artefact de jeton/compte sélectionné existe. Pour une cible de compte sans manifeste, sélectionnez manuellement le compte ABI approprié. |
| L'adresse cible n'a pas de code contrat | Vérifiez l'environnement sélectionné et entrez l'adresse du proxy déployé, et non une bibliothèque d'aide ou une adresse d'implémentation. |
| Paramètres JSON non valides | Utilisez l'éditeur … pour régénérer le tableau d'arguments. Assurez-vous que les tableaux et les objets utilisent un format JSON valide avec des noms de propriété entre guillemets. |
| La sélection du compte de service de portefeuille est requise | Entrez un tableau JSON de comptes valide et sélectionnez un compte de portefeuille. |
| Les API REST rpc-proxy nécessitent un environnement Oracle Blockchain Platform | Basculez vers un environnement Oracle Blockchain Platform Besu avec une URL RPC hôte uniquement ou utilisez JSON-RPC pour d'autres EVM/Hardhat. |
| Appelant non autorisé ou erreur personnalisée décodée | Vérifiez le compte appelant/portefeuille sélectionné, le proxy cible, l'état de gouvernance actif, les prérequis de rôle/stratégie et les paramètres ABI. |
| La requête ou l'appel reste indisponible | Renseignez les champs de cible, d'environnement, de fonction et de signataire requis pour le mode API sélectionné. |