Python SDK
Python helpers for Mosaic transaction dicts and metadata verification.
mosaic-sdk exports MosaicClient and metadata helpers.
Import
from mosaic_sdk import MosaicClient, canonical_metadata_hash, load_metadataConfigure
client = MosaicClient(
rpc_url="https://mainnet.base.org",
contract_address="0x0c7fad7C9bBaD0BE62aAc867c6069d7Aad7Cb361",
)Defaults:
| Field | Value |
|---|---|
chain_id | 8453 |
usdc_address | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 |
MosaicClient rejects non-Base chain_id values and non-Base-USDC usdc_address values.
Build Bounty Transaction
metadata = {
"version": 1,
"title": "Find a reproducible bug",
"brief": "Submit a minimal reproduction and a fix suggestion.",
}
tx = client.create_bounty(
metadata_uri="ar://bounty-json",
metadata_hash=canonical_metadata_hash(metadata),
reward_amount=50_000_000,
duration=86_400,
)Returned transaction dict:
{
"chainId": 8453,
"to": "0x...",
"data": "0x...",
"value": 0,
}Transaction Helpers
| Method | Contract Call |
|---|---|
approve_usdc(amount) | USDC approve(contractAddress, amount) |
create_bounty(metadata_uri, metadata_hash, reward_amount, duration) | createBounty(string,bytes32,uint256,uint64) |
submit(bounty_id, metadata_uri, metadata_hash) | submit(uint256,string,bytes32) |
dispute(submission_id, metadata_uri, metadata_hash) | dispute(uint256,string,bytes32) |
finalize(bounty_id) | finalize(uint256) |
advance_review_cursor(bounty_id) | advanceReviewCursor(uint256) |
refund_expired(bounty_id) | refundExpired(uint256) |
refund_submission_bond(submission_id) | refundSubmissionBond(uint256) |
cancel_resolved_dispute(challenge_id) | cancelResolvedDispute(uint256) |
withdraw() | withdraw() |
withdraw_to(recipient) | withdrawTo(address) |
Metadata Helpers
metadata = await load_metadata(
"ar://bounty-json",
expected_hash="0x1111111111111111111111111111111111111111111111111111111111111111",
)canonical_metadata_hash(metadata) hashes sorted compact JSON with Keccak.
load_metadata(uri, expected_hash=None, gateway="https://arweave.net") fetches HTTP URLs directly. For ar:// URIs, it prefixes the configured gateway. When expected_hash is set, it raises ValueError("metadata hash mismatch") on mismatch.
Inputs
- Amount arguments are integers in USDC base units.
- Metadata hash arguments must encode to 32 bytes.
