当前位置:网站首页>Contrat de solidity pour l'achat à distance de marchandises
Contrat de solidity pour l'achat à distance de marchandises
2022-07-18 22:38:00 【Levi 104.】
Préface:
L'enchère publique précédente sera ensuite étendue à une enchère secrète. L'avantage des enchères secrètes est qu'il n'y a pas de pression temporelle avant la fin de l'appel d'offres. Une enchère secrète sur une plate - forme informatique transparente peut sembler contradictoire,Mais la cryptographie peut le faire.
In Pendant la période d'appel d'offres ,Le soumissionnaire n'a pas envoyé son offre,Au lieu d'envoyer une version hachée de l'offre. Comme il est presque impossible de trouver deux(Assez long.)Valeur,Sa valeur de hachage est égale,Par conséquent, le soumissionnaire peut soumettre une offre de cette façon. Après la clôture de l'appel d'offres,Les soumissionnaires doivent rendre publiques leurs offres:Ils envoient leurs offres sans cryptage,Le contrat vérifie si la valeur de hachage de l'offre est la même que celle fournie pendant la période d'appel d'offres.
Un autre défi consiste à faire en sorte que les enchères se déroulent simultanément Liens et secrets : La seule façon d'empêcher un soumissionnaire de ne pas payer après avoir gagné l'enchère est,Qu'elle envoie l'argent avec l'offre. Mais comme les fonds ont été transférés à EthereumEthereum Ne peut pas être caché,Pour que tout le monde puisse voir les fonds transférés.
Le contrat suivant résout ce problème en acceptant toute valeur supérieure à l'offre maximale. Bien sûr.,Parce que cela ne peut être vérifié qu'au stade de la divulgation,Certaines offres peuvent être Invalide De, Et,C'était intentionnel.(Avec une offre élevée,Il fournit même un logo clair pour identifier les offres invalides): Un soumissionnaire peut confondre un concurrent en établissant plusieurs offres invalides, élevées ou basses.
Analyse:
L'achat à distance exige la confiance mutuelle de l'acheteur et du vendeur,Dans l'exemple suivant,Les acheteurs et les vendeurs doivent évaluer les marchandises(1*value)Deux fois plus.(2*value En dépôt ) Dans le contrat comme séquestre .
Comme il n'y a aucun moyen de déterminer si les marchandises arrivent à l'acheteur ,Quand ça arrivera, Cet argent sera enfermé dans un contrat , Jusqu'à ce que l'acheteur confirme la réception de l'article .
Après le succès de la transaction, L'acheteur obtient la valeur (1*value)Et articles, Et le vendeur obtient trois fois la valeur (3*value, Dépôt plus valeur de la marchandise ).L'idée derrière ça est, Les deux parties sont motivées à résoudre le problème , Sinon, leur argent sera bloqué pour toujours .
Ce contrat ne résoudra certainement pas le problème , Mais il donne un aperçu de la façon dont une structure similaire à une machine d'état peut être utilisée dans un contrat .
Le code suivant est solidity De nombreux commentaires ont été ajoutés au document officiel en anglais pour aider à mieux comprendre .
pragma solidity ^0.8.4;
// Achat à distance sécurisé ,RemixCompilation
contract Purchase{
uint public value;//Valeur des marchandises
address payable public seller;//Adresse du vendeur
address payable public buyer;//Adresse de l'acheteur
//Type d'énumération,Pas de point - virgule, Utilisé pour marquer l'état de la transaction
enum State{Created,Locked,Release,Inactive}
State public state;// Définir les variables de type d'énumération
//modifier Similaire à une fonction générique pour d'autres functionAppel répété,Réduire la quantité de code
//_;Peut être placémodifierStructure{} N'importe où à l'intérieur pour lancer l'appel modifierDefunctionCode
modifier condition(bool condition_){
require(condition_);
_;
}
//error Utilisé pour expliquer la cause de l'échec de l'opération ,Peut hériter, La liste des paramètres ne peut définir que le type de données ou être vide
//Impossible de recharger, Ne peut pas être utilisé comme moyen de contrôler le flux , Le contrat peut être défini à l'intérieur et à l'extérieur .
// Doit être appelé avec revertModification,revert Pour le repli error Les données sont envoyées à l'appelant et toutes les modifications de l'appel courant sont annulées .
error OnlyBuyer();// Seuls les acheteurs peuvent invoquer
error OnlySeller();// Seul le vendeur peut appeler
error InvalidState();// L'état actuel de la transaction est Invalid,Impossible d'appeler
error ValueNotEven();// Le prix des produits de base n'est pas pair , La transaction doit être interrompue
modifier onlyBuyer(){
if(msg.sender != buyer)
revert OnlyBuyer();
_;
}
modifier onlySeller(){
if(msg.sender != seller)
revert OnlySeller();
_;
}
modifier inState(State state_){
if(state != state_)
revert InvalidState();
_;
}
//Appelezevent Il est possible d'enregistrer les modifications apportées à certains éléments du contrat ( Enregistré sur blockchain ),Avec des mots clésemit Modifier l'appel
//Événements(event) Et les journaux ne sont pas accessibles dans le contrat , Peut être appelé par sous - contrat
event Aborted();// Identifier l'état de la transaction interrompue
event PurchaseConfirmed();// Identifier l'origine de la transaction
event ItemReceived();// Identification de la confirmation de transaction
event SellerRefunded();// Identifier l'événement de remboursement du vendeur
//Constructeur,Appelé lors du déploiement du contrat,Appelé une seule fois, L'adresse à laquelle le contrat est invoqué pour la première fois est par défaut le vendeur et le prix de vente est initialisé
//Version actuelle deaddressDivisé en:address Et payable address
//payable addressSoutien.transferEt.sendMéthodes,Pour envoyerether
//payable addressSeulement pourpayable addressTransfert,Et pas pouraddressTransfert
constructor() payable{
seller = payable(msg.sender);
value = msg.value/2;
if((2*value)!=msg.value)
revert ValueNotEven();//valueDoit être pair
}
// Interrompre la transaction , Rembourser le vendeur
function abort() external onlySeller inState(State.Created){
emit Aborted();
state = State.Inactive;
seller.transfer(address(this).balance);// Dans ce contrat, l'intelligence est appelée par transaction function, Montant du transfert d'accompagnement , Il faut donc rembourser le vendeur ici
}
//Lancer une transaction( L'initiateur de la transaction est placé comme acheteur ), Changer l'état de la transaction à Locked
function confirmPurchase() external
inState(State.Created) condition(msg.value == (2*value)) payable{
emit PurchaseConfirmed();
buyer = payable(msg.sender);// .Forcer la conversion de type va buyerConvertir enpayable addressType
state = State.Locked;
}
//Confirmer la transaction, Transfert à l'acheteur 1*value, Changer l'état de la transaction à Release
function confirmReceived() external onlyBuyer inState(State.Locked){
emit ItemReceived();
state = State.Release;
buyer.transfer(value);
}
//Remboursement des transactions, Transfert au vendeur 3*value, Changer l'état de la transaction à Inactive
function refundSeller() external onlySeller inState(State.Release){
emit SellerRefunded();
state = State.Inactive;
seller.transfer(3*value);
}
}边栏推荐
- 技术干货| MindSpore新一代自主研发分子模拟库:Mind-Sponge
- new操作符具体做了什么,面试
- The 100 billion yuan universe market is the new driving force of soul and Yingke
- Sff1602-mhchxm ultrafast recovery diode sff1602
- TCP congestion control details | 6 Active queue management
- Lingo solves the maximum (small) value of piecewise function
- UCOS III learning notes (11) -- task semaphores and task message queues
- Technology dry goods | mindspire new generation self-developed molecular simulation library: mind sponge
- MySQL 5.7.37 database download and installation tutorial (no installation required for Windows)
- 博途PLC模糊PID控制(量化因子和比例因子)
猜你喜欢

Crazy God redis notes 01

快速解决MySQL插入中文数据时报错或乱码问题

技術幹貨| MindSpore新一代自主研發分子模擬庫:Mind-Sponge

KDD 2017 | metapath2vec:异质图的可扩展表示学习

Innovation Center launch! Congratulations to Jiahua Wulian cloud for obtaining mindspire certification!

Which brand of Bluetooth headset has good noise reduction? Top 10 active noise reduction headphones

Dior is suspected of plagiarizing Chinese horse face skirt, and the product has been removed from the domestic official website

Byte 3 finally landed. Please keep this hot noodle Sutra "including free information"

Information system project manager must recite the core examination site (44) planning risk response

Dcat Admin 代码生成器应用(重新编辑)
随机推荐
在匿名内部类中访问局部变量
封装、获取系统用户信息、角色及权限控制
毕业季--数据库常见面试题
2 - Conan Binary package Dependence Management Scheme
开源十问, 社区新人快速上手指南
2-conan binary package dependency management scheme
看完这篇 教你玩转渗透测试靶机vulnhub——EvilBox-One
pA是什么?构建病毒的结构元件,polyA,一段重复的碱基序列
Open source ten questions, a quick start guide for community newcomers
华为 od js 拼接URL
千亿元宇宙市场,Soul、映客的新动力
Sff1602-mhchxm ultrafast recovery diode sff1602
【部署】Redis
Why is OS called in uCOSII_ ENTER_ Critical() or OS_ EXIT_ Critical() will make an error. The error message is: undeclared identifier `cpu_ sr‘
js 手写sort
1. Shell echo > and echo > >
Deep understanding of C language pointer and array
JS handwritten sort
js 华为od日志时间排序
Results of shooting competition Huawei od JS