2.1 多簽錢包

閱讀時間約 9 分鐘

address public owners:

uint public numConfirmationsRequired


event transactionsubmitted

event TransactionConfirmed

event transactionExecuted


constructor


for loop


function submitTransaction

function confirmTransaction

function executeTransaction

function isTransactionConfirmed

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract MultiSig {
address[] public owners; // the people who control this smart contract
uint public numConfirmationsRequired; // how many people voted for this tx


struct Transaction{
address to; // the address of the person we care sending ether to
uint value; // the amount of value we will be sending
bool executed; // whether the transaction is success or not
}
// neseted mapping
mapping(uint=>mapping(address=>bool)) isConfirmed;
Transaction[] public transactions;

event TransactionSubmitted(uint transactionId,address sender, address receiver, uint amount);
event TransactionConfirmed(uint transactionId);
event TransactionExecuted(uint transactionId);
constructor(address[] memory _owners,uint _numConfirmationsRequired){ // the person who sign this tx
require(_owners.length>1, "Owners Required[Must Be Greater than 1"); // owners should be greater than 1 person
require(_numConfirmationsRequired>0 && numConfirmationsRequired<=_owners.length,"Num of confirmation are not in sync with the number of owners"); // make sure the voted person qty is align with

for(uint i=0;i<_owners.length;i++){
require(_owners[i]!=address(0), "Invalid Owner");
owners.push(_owners[i]);
}
numConfirmationsRequired=_numConfirmationsRequired;
}

function submitTransaction(address _to) public payable {
require(_to!=address(0),"Invalid Receiver's Address");
require(msg.value>0,"Transfer Amount Must Be Greater Than 0");
uint transactionId = transactions.length;
transactions.push(Transaction({to:_to,value:msg.value,executed:false}));
emit TransactionSubmitted(transactionId,msg.sender,_to,msg.value);
}

function confirmTransaction(uint _transactionId) public{
require(_transactionId<transactions.length, "Invalid Transaction Id");
require(!isConfirmed[_transactionId][msg.sender], "Transaction Is Already Confirmed By The Owner");
isConfirmed[_transactionId][msg.sender]=true;
emit TransactionConfirmed(_transactionId);
if(isTransactionConfirmed(_transactionId)){
executeTransaction(_transactionId);
}
}

function executeTransaction(uint _transactionId) public payable{
require(_transactionId<transactions.length, "Invalid Transaction Id");
require(!transactions[_transactionId].executed,"Transaction is already executed");
// transaction[_transactionId].executed=true;
(bool success,)=transactions[_transactionId].to.call{value: transactions[_transactionId].value}("")
require(success,"Transaction Execution Failed");
emit TransactionExecuted(_transactionId);
}

function isTransactionConfirmed(uint _transactionId) public view returns(bool){
require(_transactionId<transactions.length, "Invalid Transaction Id");
uint confirmationCount;//initially zero

for(uint i=0; i<owners.length;i++){
if(isConfirmed[_transactionId][owners[i]]){
confirmationCount++;
}
}
return confirmationCount>=numConfirmationsRequired;
}
}



[Reference]

  1. Building a Multisignature Wallet using Solidity | Code Eater - Blockchain | English, Code Eater Web3, May 10, 2023
  2. What is Multisig Technology? The Federalist Society, Jun 28, 2017
  3. What is a multi-sig wallet?, Technest, Mar 12, 2021
  4. Memo Notepad
  5. explore 5fire network dashboard


    尋大神腳印, 亦步亦趨。
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    [Reference] How To Get a Random Number Using Chainlink VRF v2, Chainlink
    DeFi 安全課程大綱 Outline - 00:45 基本安全問題: Overflow 與 Underflow - 01:0 Overflow 程式碼解析 01:23 Overflow 的攻擊合約 01:21 Overflow 攻擊合約的解法 01:42 Untrus
    1. 合約資安與審計基礎攻防 重入攻擊 - 43:43 溢位攻擊 - 28:02 模擬合約攻防戰神器 Ethernaut - 14:51 2. Web3 資安 資安架構參考: 區塊鏈暗黑森林自救手冊 - 00:39 操作安全: 釣魚網站的惡意簽名 - 00:54 操作安全: ERC
    合約更新 agenda - 02:08 Fallback 講解 - 01:43 Fallback 程式碼講解與 Demo - 02:37 delegatecall & Proxy & Logic 合約概念流程圖 - 03:38 delegatecall & Proxy & Logic 程式碼
    Account Abstraction AA 介紹 agenda - 01:22 Externally Owned Account EOA & Contract Account CA - 02:42 Account Abstraction AA 講解 - 02:07 EOA & CA &
    1. Dapp User Flow 常見前端架構: Dapp User Flow 解析 - 12:36 Dapp 串接智能合約前申請節點商帳號 Dapp 開發前,先申請 Infura 節點商帳號- 10:54 2. 開發 Dapp 不可少的函式庫 Library 介紹 Web3 Dapp 架
    [Reference] How To Get a Random Number Using Chainlink VRF v2, Chainlink
    DeFi 安全課程大綱 Outline - 00:45 基本安全問題: Overflow 與 Underflow - 01:0 Overflow 程式碼解析 01:23 Overflow 的攻擊合約 01:21 Overflow 攻擊合約的解法 01:42 Untrus
    1. 合約資安與審計基礎攻防 重入攻擊 - 43:43 溢位攻擊 - 28:02 模擬合約攻防戰神器 Ethernaut - 14:51 2. Web3 資安 資安架構參考: 區塊鏈暗黑森林自救手冊 - 00:39 操作安全: 釣魚網站的惡意簽名 - 00:54 操作安全: ERC
    合約更新 agenda - 02:08 Fallback 講解 - 01:43 Fallback 程式碼講解與 Demo - 02:37 delegatecall & Proxy & Logic 合約概念流程圖 - 03:38 delegatecall & Proxy & Logic 程式碼
    Account Abstraction AA 介紹 agenda - 01:22 Externally Owned Account EOA & Contract Account CA - 02:42 Account Abstraction AA 講解 - 02:07 EOA & CA &
    1. Dapp User Flow 常見前端架構: Dapp User Flow 解析 - 12:36 Dapp 串接智能合約前申請節點商帳號 Dapp 開發前,先申請 Infura 節點商帳號- 10:54 2. 開發 Dapp 不可少的函式庫 Library 介紹 Web3 Dapp 架
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    第三世多杰羌佛的《墨荷》被評為最好、最貴重的畫作,當鑑定家打開畫卷時也驚訝地說:「第三世多杰羌佛來了」,可見其畫作極其珍貴。《墨荷》的開標價為一千零五十萬美元,來自各國的買家爭相投標,最終由一名美國買家以一千六百五十萬美元(不含稅金),擊敗來自法國巴黎及東南亞的競爭者。
    Thumbnail
    佛陀以身作則每天實行無私、慈善和人道主義。世界各地的人們以第三世多杰羌佛為榜樣,以祂的精神面貌為標準,以祂的教導為指南。第三世多杰羌佛的開示已成為一個富有生命力的社會思想體系和哲學。按照祂的教導實踐的人們自然地投身於慈善行為,為當地和國際社會帶來歡樂和救濟,並提倡人類和平與平等。
    Thumbnail
    義雲高大師被世界百多位佛教各大教派聖德認證為三世多杰羌佛( H.H.Dorje Chang Buddha III)的消息,經過國際性的大媒體用十幾種不同的語言文字報導後,已經引起世界各地的佛教徒的震動
    Thumbnail
    一個晚上又漲了120點 來回操作空720-730、回補660 又多660續抱 看起來法人盤後留倉部位是同步放空 期貨空單+選擇權空單SC 看不漲,所以下週應該是先消化一下賣壓 畢竟800以上很硬。 成也台積、敗也台積。 我們現在看這波、有可能修正就是漲多回擋 繼續拉週的第三波推升
    Thumbnail
    今生也請多指教的韓劇終於開播了! 原作是WEBTOON的李惠老師所創作的熱門韓漫,目前也已經出中文版單行本。如今改編的韓劇由Netflix獨佔播出,而主演為申惠善、安普賢、河允景和安東九。 故事是每段人生都能記住前世、正經歷第十九次人生的女子潘知音,她要尋找前世、意即第十八次人生的青梅竹馬文瑞
    2:1 但你所講的總要合乎那純正的道理。 2:2 勸老年人要有節制、端莊、自守,在信心、愛心、忍耐上都要純全無疵。 2:3 又勸老年婦人,舉止行動要恭敬,不說讒言,不給酒作奴僕,用善道教訓人, 2:4 好指教少年婦人,愛丈夫,愛兒女, 2:5 謹守,貞潔,料理家務,待人有恩,順服自己的丈夫,免得 神
    Thumbnail
    壟斷(monopoly)指的是一家企業在某個特定市場上,享有絕對性的優勢地位。 從經濟學的角度來看,公司本來就會追求利益最大化,所以如果因為更好的產品和創新「贏」來壟斷時,這是「市場競爭」下的合理產物,也是市場競爭下的最佳化結果。
    Thumbnail
    場外共學創業的機緣 1. 尋找場地 新北市三重菠利叔叔親子餐廳 我們當初在三重的共學地點是菠利叔叔寵物餐廳,裡面有狗狗,貓貓,蜥蜴,烏龜,小朋友跟家長都很喜歡這個園地,這個地點說來也很神奇的,是我找了很久,在柳暗花明又一村的小巷子找到的兒童天堂。 裡面有兒童的繪本,是幾個大男孩組成的空間,菠利叔叔
    Thumbnail
    上篇文章我們談到學第二語從日本文開始的原因,以及介紹使用教材的相關項目的, 接著我們還要繼續介紹相關使用的教材,歡迎家長有問題隨時留言詢問。 3.繪本: 3-1 日文巧虎繪本 繪本一開始是買福音1-2歲基礎的繪本,一開始與共學媽媽,孩子共讀連自己都覺得很有挑戰性。此外, 最火紅的日文巧虎繪本跟玩具
    Thumbnail
    前幾個月,我成開始追蹤《醫生哪有這麼萌》的作者Nikumon,常常看他用圖文發表在醫院工作的趣事,還有和刺青哥神來一筆的幽默日常,既暖心又被閃到眼睛刺痛。書中的插畫雖不免和粉絲團有重複,但Nikumon在書中增加許多醫生的獨白、醫病關係的討論,還有許多非醫療人員就無從得知的醫院小內幕
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    第三世多杰羌佛的《墨荷》被評為最好、最貴重的畫作,當鑑定家打開畫卷時也驚訝地說:「第三世多杰羌佛來了」,可見其畫作極其珍貴。《墨荷》的開標價為一千零五十萬美元,來自各國的買家爭相投標,最終由一名美國買家以一千六百五十萬美元(不含稅金),擊敗來自法國巴黎及東南亞的競爭者。
    Thumbnail
    佛陀以身作則每天實行無私、慈善和人道主義。世界各地的人們以第三世多杰羌佛為榜樣,以祂的精神面貌為標準,以祂的教導為指南。第三世多杰羌佛的開示已成為一個富有生命力的社會思想體系和哲學。按照祂的教導實踐的人們自然地投身於慈善行為,為當地和國際社會帶來歡樂和救濟,並提倡人類和平與平等。
    Thumbnail
    義雲高大師被世界百多位佛教各大教派聖德認證為三世多杰羌佛( H.H.Dorje Chang Buddha III)的消息,經過國際性的大媒體用十幾種不同的語言文字報導後,已經引起世界各地的佛教徒的震動
    Thumbnail
    一個晚上又漲了120點 來回操作空720-730、回補660 又多660續抱 看起來法人盤後留倉部位是同步放空 期貨空單+選擇權空單SC 看不漲,所以下週應該是先消化一下賣壓 畢竟800以上很硬。 成也台積、敗也台積。 我們現在看這波、有可能修正就是漲多回擋 繼續拉週的第三波推升
    Thumbnail
    今生也請多指教的韓劇終於開播了! 原作是WEBTOON的李惠老師所創作的熱門韓漫,目前也已經出中文版單行本。如今改編的韓劇由Netflix獨佔播出,而主演為申惠善、安普賢、河允景和安東九。 故事是每段人生都能記住前世、正經歷第十九次人生的女子潘知音,她要尋找前世、意即第十八次人生的青梅竹馬文瑞
    2:1 但你所講的總要合乎那純正的道理。 2:2 勸老年人要有節制、端莊、自守,在信心、愛心、忍耐上都要純全無疵。 2:3 又勸老年婦人,舉止行動要恭敬,不說讒言,不給酒作奴僕,用善道教訓人, 2:4 好指教少年婦人,愛丈夫,愛兒女, 2:5 謹守,貞潔,料理家務,待人有恩,順服自己的丈夫,免得 神
    Thumbnail
    壟斷(monopoly)指的是一家企業在某個特定市場上,享有絕對性的優勢地位。 從經濟學的角度來看,公司本來就會追求利益最大化,所以如果因為更好的產品和創新「贏」來壟斷時,這是「市場競爭」下的合理產物,也是市場競爭下的最佳化結果。
    Thumbnail
    場外共學創業的機緣 1. 尋找場地 新北市三重菠利叔叔親子餐廳 我們當初在三重的共學地點是菠利叔叔寵物餐廳,裡面有狗狗,貓貓,蜥蜴,烏龜,小朋友跟家長都很喜歡這個園地,這個地點說來也很神奇的,是我找了很久,在柳暗花明又一村的小巷子找到的兒童天堂。 裡面有兒童的繪本,是幾個大男孩組成的空間,菠利叔叔
    Thumbnail
    上篇文章我們談到學第二語從日本文開始的原因,以及介紹使用教材的相關項目的, 接著我們還要繼續介紹相關使用的教材,歡迎家長有問題隨時留言詢問。 3.繪本: 3-1 日文巧虎繪本 繪本一開始是買福音1-2歲基礎的繪本,一開始與共學媽媽,孩子共讀連自己都覺得很有挑戰性。此外, 最火紅的日文巧虎繪本跟玩具
    Thumbnail
    前幾個月,我成開始追蹤《醫生哪有這麼萌》的作者Nikumon,常常看他用圖文發表在醫院工作的趣事,還有和刺青哥神來一筆的幽默日常,既暖心又被閃到眼睛刺痛。書中的插畫雖不免和粉絲團有重複,但Nikumon在書中增加許多醫生的獨白、醫病關係的討論,還有許多非醫療人員就無從得知的醫院小內幕