Skip to main content

MultisigCommittee

MultisigCommittee

class MultisigCommittee

A multisig committee

A MultisigCommittee is a set of members who collectively control a single Address on the IOTA blockchain. The number of required signatures to authorize the execution of a transaction is determined by (signature_0_weight + signature_1_weight ..) >= threshold.

BCS

The BCS serialized form for this type is defined by the following ABNF:

multisig-committee = (vector multisig-member)
u16 ; threshold

There is also a legacy encoding for this type defined as:

legacy-multisig-committee = (vector legacy-multisig-member)
u16 ; threshold

init(members:threshold:)

convenience init(members: [MultisigMember], threshold: UInt16) throws

Construct a MultisigCommittee and verify it via validate.

This rejects committees that:

  • have a zero threshold;
  • contain zero or more than ten members;
  • contain a member with weight 0;
  • have a threshold greater than the sum of all member weights;
  • contain duplicate public keys.

Note that the order of the members is significant towards deriving the Address governed by this committee.

debugDescription

var debugDescription: String { get }

A textual representation of this instance, suitable for debugging.

Calling this property directly is discouraged. Instead, convert an instance of any type to a string by using the String(reflecting:) initializer. This initializer works with any type, and uses the custom debugDescription property for types that conform to CustomDebugStringConvertible:

struct Point: CustomDebugStringConvertible {
let x: Int, y: Int

var debugDescription: String {
return "(\(x), \(y))"
}
}

let p = Point(x: 21, y: 30)
let s = String(reflecting: p)
print(s)
// Prints "(21, 30)"

The conversion of p to a string in the assignment to s uses the Point type's debugDescription property.

deriveAddress()

func deriveAddress() -> Address

Derive an Address from this MultisigCommittee.

A MultiSig address is defined as the 32-byte Blake2b hash of serializing the SignatureScheme flag (0x03), the threshold (in little endian), and the concatenation of all n flag, public keys and its weight.

hash(0x03 || threshold || flag_1 || pk_1 || weight_1 || ... || flag_n || pk_n || weight_n).

members()

func members() -> [MultisigMember]

The members of the committee

scheme()

func scheme() -> SignatureScheme

Return the flag for this signature scheme

threshold()

func threshold() -> UInt16

The total signature weight required to authorize a transaction for the address corresponding to this MultisigCommittee.

validate()

func validate() throws

Checks if the Committee is valid.

A valid committee is one that:

  • Has a nonzero threshold
  • Has at least one member
  • Has at most ten members
  • No member has weight 0
  • the sum of the weights of all members must be at least the threshold
  • contains no duplicate members

!=(_:_:)

static func != (lhs: Self, rhs: Self) -> Bool

Returns a Boolean value indicating whether two values are not equal.

Inequality is the inverse of equality. For any values a and b, a != b implies that a == b is false.

This is the default implementation of the not-equal-to operator (!=) for any type that conforms to Equatable.

  • Parameters:
    • lhs: A value to compare.
    • rhs: Another value to compare.

==(_:_:)

static func == (self: MultisigCommittee, other: MultisigCommittee) -> Bool

Returns a Boolean value indicating whether two values are equal.

Equality is the inverse of inequality. For any values a and b, a == b implies that a != b is false.

  • Parameters:
    • lhs: A value to compare.
    • rhs: Another value to compare.