UpdateCustodianMultisigWallet.sol

Overview

The UpdateCustodianMultisigWallet.sol file implements a multisignature wallet smart contract that supports custodianship with flexible key and address management, transaction confirmation, and data update processes. It enables multiple custodians to collectively manage funds and contract ownership, requiring a configurable number of confirmations for both fund transfers and contract data updates. This wallet supports sending native currency (nanograms) and ECC tokens with control over message flags and payloads. It also handles transaction expiration and custodians' request limits.

This contract is designed for secure and collaborative wallet management, allowing for dynamic updates of custodian sets and required confirmations, which enhances governance flexibility. The contract employs bitmask operations for efficient management of confirmation states and queued requests.


Data Structures

Custodian

Transaction

UpdateData


Constants and Variables

Storage Variables


Constructor and Initialization

constructor

_initialize


Public Functions

sendTransaction

submitTransaction

confirmTransaction

submitDataUpdate

confirmDataUpdate

setMaxCleanupOperations


Internal Helper Functions

Bitmask Operations

Custodian Lookup

ID and Expiration

Confirmation Handlers

Cleanup Functions


Getters


Events


Fallback and Receive


Versioning


Interaction with Other System Components


Important Implementation Details and Algorithms


Usage Examples

Submitting a Transaction

uint64 txId = wallet.submitTransaction(
    destAddress,
    1000000000, // 1 gram in nanograms
    ccMapping,  // ECC token amounts
    true,       // bounce flag
    0,          // flags
    payloadCell // TvmCell with payload
);

Confirming a Transaction

wallet.confirmTransaction(txId);

Submitting Data Update

uint64 updateId = wallet.submitDataUpdate(
    newOwnersPubkey,
    newOwnersAddress,
    newReqConfirms,
    newReqConfirmsData
);

Diagram: Contract Structure and Main Workflows

classDiagram
class UpdateCustodianMultisigWallet {
-optional~uint256~ m_ownerKey
-optional~address~ m_ownerAddress
-uint256 m_requestsMask
-uint256 m_requestsMaskData
-mapping~uint64, Transaction~ m_transactions
-mapping~uint64, UpdateData~ m_data
-mapping~uint256, Custodian~ m_custodians
-uint8 m_custodianCount
-uint8 m_defaultRequiredConfirmations
-uint8 m_defaultRequiredConfirmationsData
-uint _max_cleanup_operations
+constructor()
+sendTransaction()
+submitTransaction()
+confirmTransaction()
+submitDataUpdate()
+confirmDataUpdate()
+setMaxCleanupOperations()
+getParameters()
+getTransaction()
+getUpdateData()
+getTransactions()
+getUpdateDatas()
+getTransactionIds()
+getUpdateCodeIds()
+getCustodians()
}
class Custodian {
+optional~uint256~ owner_pubkey
+optional~address~ owner_address
+uint8 index
}
class Transaction {
+uint64 id
+uint32 confirmationsMask
+uint8 signsRequired
+uint8 signsReceived
+Custodian creator
+address dest
+uint128 value
+mapping~uint32, varuint32~ cc
+uint16 sendFlags
+TvmCell payload
+bool bounce
}
class UpdateData {
+uint64 id
+uint32 confirmationsMask
+uint8 signsRequired
+uint8 signsReceived
+Custodian creator
+uint256[] owners_pubkey
+address[] owners_address
+uint8 reqConfirms
+uint8 reqConfirmsData
}
UpdateCustodianMultisigWallet "1" *-- "multiple" Custodian : manages
UpdateCustodianMultisigWallet "1" *-- "multiple" Transaction : queues
UpdateCustodianMultisigWallet "1" *-- "multiple" UpdateData : queues
Transaction o-- Custodian : creator
UpdateData o-- Custodian : creator

This diagram illustrates the main classes and their relationships within the contract, highlighting how transactions and data updates are linked to custodians and managed by the wallet.