پروژه کیف پول مشترک (Shared wallet) در قرارداد هوشمند Solidity
کیف پول مشترک در قرارداد هوشمند سالیدیتی (solidity)
می توان کیف پول مشترک در قرارداد هوشمند سالیدیتی (solidity) ساخت. صاحب این قرارداد می تواند مالکان دیگری را اضافه و حذف کند و مالکان را به طور موقت غیرفعال کند. هر کسی می تواند ETH را به قرارداد واریز کند، اما برای برداشت ETH بیشتر از یک مالک باید تراکنش را تأیید کند.
برای یادگیری اصول اولیه mappingها، اصلاح کننده های تابع و رویدادها، قرارداد زیر را آزمایش کنید. سعی کنید کد قرارداد هوشمند را گسترش دهید. آن را با استفاده از Remix در شبکه آزمایشی دپلوی کنید. یادتون باشه:
- ذخیره یک متغیر حالت در بلاک چین از gas استفاده می کند.
- مشاهده متغیرهای حالت از زنجیره بلوکی از gas استفاده نمی کند.
pragma solidity ^0.5.17;
contract sharedWallet {
address private _owner;
//create a mapping so other addresses can interact with this wallet. Uint8 is used to determine is the address enabled of disabled
mapping(address => uint8) private _owners;
//in order to interact with the wallet you need to be the owner so added a require statement then execute the function _;
modifier isOwner() {
require(msg.sender == _owner);
_;
}
//Require the msg.sender/the owner OR || Or an owner with a 1 which means enabled owner
modifier validOwner() {
require(msg.sender == _owner || _owners[msg.sender] == 1);
_;
}
event DepositFunds(address from, uint amount);
event WithdrawFunds(address from, uint amount);
event TransferFunds(address from, address to, uint amount);
//the creator is the owner of the wallet
constructor()
public {
_owner = msg.sender;
}
//this function is used to add owners of the wallet. Only the isOwner can add addresses. 1 means enabled
function addOwner(address owner)
isOwner
public {
_owners[owner] = 1;
}
//remove an owner from the wallet. 0 means disabled
function removeOwner(address owner)
isOwner
public {
_owners[owner] = 0;
}
//Anyone can deposit funds into the wallet and emit an event called depositfunds
function ()
external
payable {
emit DepositFunds(msg.sender, msg.value);
}
//to withdraw you need to be an owner, the amount needs to be >= balance of acct. then transfer and emit an event
function withdraw (uint amount)
validOwner
public {
require(address(this).balance >= amount);
msg.sender.transfer(amount);
emit WithdrawFunds(msg.sender, amount);
}
function transferTo(address payable to, uint amount)
validOwner
public {
require(address(this).balance >= amount);
to.transfer(amount);
emit TransferFunds(msg.sender, to, amount);
}
}
یک کیف پول مشترک قرارداد هوشمند Solidity یک کیف پول چند امضایی قرارداد هوشمند Solidity نیست.
در صورتی که تجربه خاصی در خصوص برنامهنویسی ندارید میتوانید از دورههای رایگان سایت ما “فرازمان“، استفاده کنید. همچنین اگر به دورههای پیشرفتهتری در این خصوص نیاز داشته باشید، ما با آموزش های حرفه ای که در سایتمان قرار دادیم می توانید به سطح دلخواهتان با تلاش و پشتکار برسید.
نقشه راه
راهنما آکادمی فرازمان
برای یادگیری برنامه نویسی بلاکچین…
در این باره بیشتر بخوانید
دیدگاهتان را بنویسید