Publication
Partagez vos connaissances.
Prélever des frais sur une pièce dans le cadre d'une opération d'échange DEX
Cela fait une semaine que j'ai du mal à mettre en œuvre un contrat qui applique des frais à une pièce utilisée dans un échange DEX. Il semble que je n'arrive pas à lire le montant SUI de la pièce à partir de la sortie car elle a été consommée lors de la transaction. Comment puis-je prélever des frais de manière atomique si des fonctions telles que swap_a2b
ne pas retourner une pièce ?
- Move CLI
- Move Bug
Réponses
2Si vous consommez la pièce pour une transaction, elle ne pourra plus être utilisée. Si vous l'utilisez pour payer l'essence, il ne s'agit que d'un usage unique. En ce qui concerne les échanges DEX, une fois que vous passez une pièce comme OutCoina dans un échange de fonctions, elle est consommée et les appels suivants ne la reconnaîtront pas à moins qu'elle ne soit renvoyée explicitement. Le principal problème est peut-être que swap_a2b ne renvoie rien, ce qui signifie que vous ne pouvez pas prélever de frais directement après une opération d'échange. Une solution pourrait consister à s'approprier la pièce à échanger et, après avoir exécuté l'échange, à soustraire les frais avant de transférer le résultat à l'utilisateur.
Intégrer la fonctionnalité d'échange dans un contrat intelligent peut résoudre ce problème. En exécutant le swap dans le cadre du contrat, vous pouvez gérer la propriété et la distribution de manière à gérer les frais de manière atomique. Le contrat exécuterait l'échange, gérerait la soustraction des frais, puis distribuerait le montant restant à l'utilisateur. Voici une approche dans le contexte du PTB : 1. divisez la pièce en un CoinIn distinct, 2. transmettez cette pièce au contrat intelligent pour l'échange, la gestion des frais et revenez à l'étape utilisateur. Vous n'avez pas nécessairement besoin de transférer explicitement l'objet coin avant l'étape 2 si le contrat intelligent prend CoinIn par valeur.
Connaissez-vous la réponse ?
Veuillez vous connecter et la partager.
Move is an executable bytecode language used to implement custom transactions and smart contracts.