Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions examples/multi_sig_withdraw.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import example_utils

from hyperliquid.utils import constants
from hyperliquid.utils.signing import WITHDRAW_SIGN_TYPES, get_timestamp_ms, sign_multi_sig_user_signed_action_payload


def main():
address, info, exchange = example_utils.setup(constants.TESTNET_API_URL, skip_ws=True)
multi_sig_wallets = example_utils.setup_multi_sig_wallets()

# The outer signer is required to be an authorized user or an agent of the authorized user of the multi-sig user.

# Address of the multi-sig user that the action will be executed for
# Executing the action requires at least the specified threshold of signatures
# required for that multi-sig user
multi_sig_user = "0x0000000000000000000000000000000000000005"

# Address to withdraw funds to (can be different from the multi-sig user)
destination_address = "0x0000000000000000000000000000000000000000"

timestamp = get_timestamp_ms()

# Define the multi-sig inner action - in this case, withdrawing from bridge
action = {
"type": "withdraw3",
"signatureChainId": "0x66eee",
"hyperliquidChain": "Testnet",
"destination": destination_address,
"amount": "2.0",
"time": timestamp,
}
signatures = []

# Collect signatures from each wallet in multi_sig_wallets. Each wallet must belong to a user.
for wallet in multi_sig_wallets:
# Sign the action with each wallet
signature = sign_multi_sig_user_signed_action_payload(
wallet,
action,
exchange.base_url == constants.MAINNET_API_URL,
WITHDRAW_SIGN_TYPES,
"HyperliquidTransaction:Withdraw",
multi_sig_user,
address,
)
signatures.append(signature)

# Execute the multi-sig withdrawal with all collected signatures
# This will only succeed if enough valid signatures are provided
# Note: The amount received will be reduced by the withdrawal fee
multi_sig_result = exchange.multi_sig(multi_sig_user, action, signatures, timestamp)
print(multi_sig_result)


if __name__ == "__main__":
main()