Contract 7041b963b9da207bbc8f4010d64f222acb672f227ef259588d20c204f3a5183a

← Back to Index 📥 Download WASM

Meta

rssdkver 25.3.1#e50d95af029c83196dd122f0154bac3f1302394b
rsver 1.95.0

Instances

  • CA5ADMI6HAJHMLO35M6RIEWEJTX4PYYVDTL4ZG6HP4I2JA4FFRV3DJ7U
  • CA5Q7AMRH3R5FMKHHECXAZ36T3WIAH7XFJ5GFF6VGAPH26F5DKJ3Q7MZ
  • CA72OPZY7XTXXH4OCXMY2MDBP42RHCZ6FB5S25ZHLMHHTFQZAR72BJ4Y
  • CA7SQVPSKB46NWX5OTVCESAEUCIQS5X4PHAOVRTC5NDUBOYI73JJ27QH
  • CAAF3R6NPMBUXAYJDCJQX3BHID2IOCQBYRRZGMSWUJ4OF2DK7UZ3LYR5
  • CADCRC7UDCD3P6CNP2N4YAGOKIUGHTLGAENNS27AACCUDF66KXREWQNM
  • CADF6DUEF3SLNIZDRJH32WECO4OEAOCUWQ3XSHYZLEGPXKG7TEXEGPD2
  • CAFJCQGXZJGOXUVN7KOWLFF463WQHHIUNJDWSKGZCP4HUHQBDZZMHARC
  • CAGUPITPGNSZGXHMDOBSTAE266D2ALVNP4YBPC67GR4XW425WOR3WA3F
  • CAIDA4AVGNLSR2E6QV64T6H2344DKFR7GEWWMRB4HNZQ766UX2LCT7CC
  • CAIN4H4OB7RE4LM4MDS6LX6JKFKZLKHYB6M2CPIRUBE4B2V3O7TLNHKW
  • CAIZEQ6XW7VQHR2Q2QTH23FIWMU7VRU2JWQM5N6MID33EI3FJ2UMVMXY
  • CAJ2DO2KNWPZP7S2NQRCIVHI4HCLKCXGK334UBWEWT3ULF37IJMPF7RT
  • CALY7FMJN7ZB4P4DWWCAEDMAOPVBOFPGOGTOIUBZABBUJEMNKYRWACMT
  • CANM2NWVEHO2NBK5QHCYM4TUW6QSUUS3AUETYUBDWUBMMOF42PJA4H6Z
  • CAO6UYLVY6RFHEDH4URLQF2MTUG6LZSS37H3YSN5IS4ZPDB4G5TXPITT
  • CAQ2WT2FWCRQQ36YI3GI2JXQVJCNNYBPZZFV5LMMSQ7OWFOLIRLFHKCC
  • CARDO3IODTJ66VMQ73RTQVXE6EOI3FDBC2CO5YS532567OW5KIM3U44N
  • CARHKQFNM3QSNSUROVRBUMLCN7UJWHLLMH4DJ5OI7EKZZ7V2RRQIFIPT
  • CAV64SIX622VKMHOE72NZEYOGIYZJ3YQHEQ4W44EUMJ23IWZP7FJWQ77
  • CAVAND4WDFQTVKBZ2RGINPNKNGJJ5WZUBNZE5ZVTVPSGG4KZPFUTU7DN
  • CAW2UUQCOT3VUMS42WE3U64DE3LU5LNX3C35AQ6O26HQOBC6OE5BTQWX
  • CAWWTTDFAD54KI72WGC6T3TEYQFTN65VJ4DWIT3GWGMQADDOVU3TKNV4
  • CAXPDPR5IOWT37ZXHZ5K2FJM6ISOL726I2XKYJY6WTF22HAMMRILTB5K
  • CAXVBAA35V4MHGZSXXKDYULXYFE4Z6R7OGNG2XBDLZUN7KK6JCCEBEAI
  • CAY7XCKRHWT7MMCYRJJXML54TDLDE5TS7Y6VX45B3BZQICWBVJXDBGWY
  • CB44LNLHJ5Q7236VE6A6N4J5LJ22AISUBOAE5RVGL3DOQZEHDBOIPC4M
  • CB4PSW452CPWZGZUGE3FW2QIGIDKQUTUQOQH2D4JX3KYWLHOJWAELHMX
  • CB5NZCUG5JKJT2A2PBUTFVP7OHT54P4D2KEG7OYAG5WQEU2VDTDH6T2P
  • CB6Y6UPPSW3VQB2KB5ZADSECOXUIV3BQD2RYFGYRW76FGIF57HICULWF
  • CBAH2WP4EELBX7YZQLWSOS7IYD7IS6XIO6WF3MDPZVS7W3UEDS4WK53R
  • CBDIMHFALUMVQAD2BX3OJH6PVYF2BZN7LF6BQRWR5UM7HT7XBNADT7ID
  • CBDPLETNICMT3PGKADHUL5ABXJFYWEPESUIDHAO75MNTU4D5KN4V3OSF
  • CBFOUSVVWRKC5WB2VDNXPYQYITLGHDMITK7S5W7YDPCA5CX6WAWBZDN2
  • CBGJJ6PFQJ6QLZJ5LZC37E2SVRP3I6LIFY3QSNI2WEFCQEJFXMDUZU7E
  • CBHCWSYLOWR3XPLGD477HMVELSQQ6IIPDPC375PPR44N6C55TCUB3ZAS
  • CBHGFXXBJAHGG356TCVQLF74RMKBTSCQBV3M5QV6DQUYLYADBHEVRXIQ
  • CBICCDFONJZM7MF4E2FAIIGTSH7XRL3NGNAQOUFZTTJTGKAYQN6TXQBL
  • CBIPGG2JOKBVNMKE5YWHBOJQ6VITJSEM24V3KJQ33U3LKUJH6DFDOLPS
  • CBJDJCAODME5XXIYYPZBKYWBEUXVFF5ILQHO3H3K3BRDWE56NLFNHEAS
  • CBKMMLNRY3B7UVHKQN4R4ZS3ATFDATVGCY5MU6XUV4YCMXEAJEJLLKH2
  • CBKRQST22VU2MVNXM2GOPGR7ST2PYR2UIJK2A57T5VNIHTJM5U7AHEMF
  • CBLVVVUJSBKWBNIVXSE4IAVUJQUCWYO5L2GF2CZ7NP63LCNJKECXJ7NP
  • CBM5C6TXOLA3U6IPZBKDUDX2YBH6FCHARWVUEBAQIUCLLZIFF4E6UIUP
  • CBMT2XSZPXSE6LTAMXMCKFIN5N6S7NLMEVH3GHPZBNBUPJSFJGLHTF5M
  • CBNCALSHOADAE5SNQRNHAT3ELO7G2DOWM4NGXYZLULYAARL4EZKHZLJD
  • CBPUNQVZO7KSGFL57HCQTCJ75CEGR3G4F73GPC72C6JANC3O5FBPYQGZ
  • CBSMBZYKWLVBYACACFNU5RJBZZHIPORSYU72RF5JEY3CWCOIZJG4EEYW
  • CBUP6G7QG5BDBSZ3TXZOHYOHMJ5IEBIV5ET5M64S3Y5RMUVQMYUXOKZC
  • CBVZKRBWYYBWS27VWRNZIIUCVLGVS3SBXDOJ7SDQMZMFHJVY44IT7G5U
  • CBWZLSC6YSNYQC4MUDURB4DRW6VMR3BD3Z5FLJGO6QZ3WISD363CKQTV
  • CBZECXARKDLVTQUE3AIM7Q3EFVW2EZQACUJCKGEYDJF3225SEVMJWBQY
  • CC2K2ROXZFM4IZYC52JPCY25S3UTHYL7RJ5CEPRWNKOHEYI6CR453WY6
  • CC36PMDI6H77P2YVHJMISFTYXU4C3VLZQ3QL52OUEIUGLIKSR3MFMLJS
  • CC3LMIZNTBSNUK76EVKPSOWVEZUMEIJAF2QSL5P3KVP6AOVFQUYGTKU4
  • CC4B2BLR3KVDMPMKB4XSGPF62NL4QSZEL2ZUC2GN44EKQ4E2BE6VEFS6
  • CC674N6Y7IUJOWOHMROBSHETHHEEPWYGAVPAMBP67GOZAMDT2IO6XLE5
  • CCCJNPAI5KABXHCAUDC5N2RHJV7PLL75K2JCN7NMIDRZEOV2T6RHZYPV
  • CCCYH5WUY2R3CSKVTJW5DDPQU3ZQHLNXZ2KTRPJE4XWBURFVR4YFZDP6
  • CCD6S4CD3CSLP4V2ABIWSIEUFEHSF7WKB3RBB3CE4HOG3UIYMZC4YKKF
  • CCDXSUX7JUFYL7KKEUNPSQY54ZA2QDCQJMPNCHPF575BJAZKSY5AIGZ3
  • CCE24V62PVHOJ6KENIB3V3LMC4WXCXU6OULCZXP47BYPLQPEW6XODRX5
  • CCFCXFGRHFUSDSGPY5EDAILY6RXYKJP6ACWVONTOJ6AWS2JM3DANNGPY
  • CCFQKU2O3WZYDUV2S6ILBOKUTQ5CVYKDJWHWXHHGDWWPV2J7KD3T7XYN
  • CCGWAEJXVTSIJMT7U2XRHLZBS4LJ5FGJJW3ILNFQ6OOHYP6XIH2PE3R5
  • CCGWESOF7N6KRZZMUQZOCGFRJBEOS6GO6LMIVAGDKNXQTJVBGR6JJEQB
  • CCHQGPW6IS4QS6XN5SWGRO3E7STGA6KPN6HQMDSUPTVVSX3Z74BDQPXN
  • CCIMGDM2ISRBUV6VHU4VVWYOY5WCZBBBKA7V2K7PGY6IQMFGIFVSEHKM
  • CCJEXAIGPRRO37BK7P7UQCFYYO7LOB4JUCGMH3IHRGCEK3ICHXCVCHHN
  • CCM6CAJGUIKTNFQPO4QMIQ3LMMRX63Y7WW56B5WFBK5Q3FB4CRNMPNTY
  • CCNATMTZOKTUI5XGYFFEJM7S4POEO6U5BWNHBYWGE2BGUZ46LFBJCA4D
  • CCP2H6CYBGMAFRB2NRZHCXRNODJZ5GOSEOZVNRESTKRIRZFVFIQUSNVM
  • CCPMCM6EVNZWOQZO6TOEADDWS5HJRM7ZFCFM4KDZXWEKGDXXJPDWURN5
  • CCPW2N6SNXA537VV5TAKKUHQCIMN45JU3XDK6FXZ4YOA4LPUGTI57NVU
  • CCQ6CBIZGSF7PGCJRUIRHMJHEMEUHBFOFP73V4CUQ24MBMF6BLUYQJHO
  • CCQC2NG5MVAMEU2STDLGDFLR2RES7MYIPJSMQ4EQJWZJZV7VVIU43NON
  • CCQF67MH7ZAKNC6LJFW7SVH7L7WXLFTNLSUJOAEITS3TFC4ZWXOEV6K3
  • CCRAQAKLM6RCUVLOC3B2EVYG6ZBR26Z37CSLOA4DJPZFBPLSL3DLLKA3
  • CCRDC3RGZCLJJ7NTFQPBIKFP7YSCWZ3B4NONJ4E5B4TTC27M6U6NRD2D
  • CCRGXTOL5BNGS44XGGA43N5UWJYXADORYYJ24D4B3CBYHEJR5Z7I4RNA
  • CCSCPKSOA4DVY2N4PPBUYEFFSYTEVBTWX34VTJWCFEP5AO6LBZ43WIKX
  • CCTY2OZQXMJXOUFPR7YIEL2UXKV4RPHEPFHNZUO6ICIGRAZA7OMBW6Q6
  • CCU5LO4CZCXGWKOZBUDJEIYZ3AH6GHC32ZOGE3VAYDH4OCD44ZPIPQNW
  • CCV33YFQNSLBG433DKGVEWS6JY5IOGNVBFRZEPDBO5V465IA67POAZAR
  • CCVNX7IDWZKKC74BWYVKFA5M7XD27QYPRW2X43RRLQV54W65FD7XPKPE
  • CCVVIDCJB7JJH7Q6SNX357FA77XXNWVP3XPG5GA6GRJCIML3QHIW7I4Y
  • CCWFMNCHM6X4TLVQ6IIQOHQSKWSLX6YYTH4AD4TZF6SDWLWPRJ37GDL6
  • CCX47RD63S4R2GO7QZ5GPMULD4NA3JVE5QZJ7VDTGCYWRD6QSQLHUYIV
  • CCYRERWLAXBKWG3GGLLY25LATVDBZ3GFF4YLCSJP4ZUUZTJLY3L657YH
  • CCZTF7DFGXTRFKLB5WQ6ZJ5UFOO3XKPU5PSBPLPH7WQR7C26JPXO4ESH
  • CD46OYY44UJJXTSHP2Y77SZLGT5UPBKG5Z546JV2V2B6KNZKH2BYYAJD
  • CD4OBKXG65TDSGO2EQ4TUEFF6PCODHOXZRCO35L7EX6O2HL4Q7IY4IRM
  • CD4SH2NEKXMHTRBFZXBJCIBCZIHPTZEFA63SWTKYYKDODVVSBGWNONQG
  • CD5VJZE47POG2IBVJTBPVBQG24KK3SGIHG23EWJVVCAUPOBA3IZUJ6FY
  • CDCEML6I3MMSMP5GLXRTFZEVNIYZQAEOZIMN4HL4FAXAA4OSD755HXYW
  • CDCX7SLQX4YHVM5ZGCX3QCXENEDY2LFXNE3DNTTVZ32VISOQN4VHU6SV
  • CDCYC7WTQSN6BWIQB2HFWSIEE3TEVGCB7ISIZRHMLHPXEL6ZYMWSDWL2
  • CDDUC6JSAOKKWJN43OJP3TA3IEA7A5P5YQ6DSCEUBGPM54ZUA5KXIRRJ
  • CDE2P53ZYEOT47QTJWQS4P7MVIZCWTORHJDLOBM4DYSR7L5O7M5ZM5EI
  • CDEWDWRJRNGOKJ37PLM5VZEMI2KL54X2EUCASBH6FAIDTTOJQHZ72BDM
  • CDF3LJQIHTPQJEM56IOFWHT4RAFYM2ZFTIHTTOK5XRW5YOUQ7ME34MUF
  • CDIY7EIPC6S43O2CGFR2FS7BPYGFAKS6SCPD4RV6A5RD4JRCU2WWIIKQ
  • CDKNKADVGJ5XBBIV2DA6V7EQTA4K6TKFLZXTYCB2J5RA5HGBWIH76LLO
  • CDLV6CMIOFEK73D3LTAGN2VAVADEHJ3MOB5SO2KR5V6AFSOTU34N2LQ5
  • CDLWOBPB4QXPLZ2AT4P7NP7BQE3DWE5RN2HJAWAFZHIPRST45L7WPFMH
  • CDND6OJTXLTBJ4XE5WPCKNLDBIOX76BA2OJACWYZBPGGSMVO33O262CU
  • CDNJADQNYWACJVM5KSJVY3LBV3PSKDP42LXFFSY6F6TFJUSPMAVFIILW
  • CDPKVWJCA3XSEPOBY6T4KXUQXG5M4WJ3IF62IRVF354AGH6ZYQHX5IFF
  • CDPWAGYQOS33M3PK5NVOT4FNGRHWHA34NVKSMYYB43U7R2A23FOYQNK5
  • CDQ2VKGDS32BXVNFBGKIUKQDVL7AQ3ASUXREJ4RAPZC27LEZUYS3PMEW
  • CDQLJA3C2XOVJEZC7LGL3IB3B5MALLYX7ZFKDSZOYLAGWUCGT27YYQ52
  • CDR2HKTZGVSRRATT3O4STMBOETDB5VUVLJQ4P2FUIYEQ2QDMETPKYRYI
  • CDRGR32UJQUNBJ6FZLRF35HJYRXWRN3KAUWLL75A3GTX5NKDMER3INPZ
  • CDRH3BQF6J6GOSL5BY7XS5UFYZUTU4EHBIND7KVXJC2N4A6FLYP4AUGY
  • CDRWW5NRHRQZK5AAUZF7EFAI2ROOBSNFDWV5ZY6GQY4S55T623YTK35R
  • CDRXBMSGYBDFZREGVPKTZNG2MCT4YGW5UALVRGEXUPZNXUAZJIN7OKRY
  • CDTDDM4COPHCNDWB2LO3M4IDRLCGRTDTZUKABOYUK2HGWLPOJ3YUSJHS
  • CDTOBQVTD2KPWI2EQ6BLDGD4MVFOMGTWYRPJ2Z4IABESI5CJYNLCK7P3
  • CDUJ45OPL54H5TND6S6NMYA43MQDJ6LJZAPHX2HG254RGFDDWNMWYCZQ
  • CDUQURWCB2ZIK3MWOGTQPDDIBGA4GU6D5FKHJUBARNV7X56YC2YF333D
  • CDXJJ4XGUQ4NZI4JMRDFKJ5CTZ3C36K6N3PMND72CDZUFQFZKM6ETOM7
  • CDZ26BPEMK6LVDOP4V53MLJ24CV3O6VIAX7SVYUQ733RBNOVOMRLBZM3
  • CDZTSNUNWHLHWJUCLXOJSIAY3R775HVOAVWKRDRC7JD5OAZQJ7YKBVYH

Interface

Take a seat. TWO signatures: the member's, because a seat is a

fn join(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    expected_amount: i128,
) -> Result

Withdraw the caller's hand, less an optional business-set platform fee

fn claim(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    fee: i128,
) -> Result

The organiser pauses the circle — one status field: settle and open_round stop; contribute, claim and exits carry on (pause stops the machine, not the recording or anyone's money).

This is also the gate upgrade and a void's INITIATION stand behind — disruptive operations happen with the machine stopped. It is the only door into Paused, so without it the contract would be permanently unupgradable.

fn pause(env: soroban_sdk::Env) -> Result<(), soroban_sdk::Error>

Recruiting → Active: fix the roster's obligations and start the

fn start(env: soroban_sdk::Env) -> Result<(), soroban_sdk::Error>

Lift a pause: one status field, nothing else — it opens no round, guards nothing and moves no deadline; open_round is the one opener and the displayed deadline is the business layer's concern.

fn resume(env: soroban_sdk::Env) -> Result<(), soroban_sdk::Error>

Bring storage written by an older build into this one's shape, so a code swap lands as upgrade() → migrate(from) with no bespoke ceremony per schema bump.

#[contracttype] encodes a struct as a map keyed by field name, so old bytes decode only if the field SET matches exactly — a gained field makes the host trap, a removed one too. ensure_schema keeps every WRITE entrypoint shut until this has run (plus get_active_policy, the one view that decodes a stored struct), which is why the contract fails closed rather than half-working after a code swap. The remaining views and keep_alive carry no gate: they read scalars or bump TTLs, and a genuinely undecodable entry traps on its own rather than returning #109.

The reshaping is generic: read the stored value as a raw Map<Symbol, Val>, drop keys this build no longer has, fill keys it has gained from reference (Policy is FLAT — there is no nested map to recurse into) — and write the result back typed. NOTE: this reshapes the POLICY entry only. T

fn migrate(
    env: soroban_sdk::Env,
    from_version: u32,
    reference: Policy,
) -> Result<(), soroban_sdk::Error>

Swap the executable. Requires the circle Paused (no live window can

fn upgrade(
    env: soroban_sdk::Env,
    new_wasm: soroban_sdk::BytesN<32>,
    expect_schema: u32,
) -> Result<(), soroban_sdk::Error>
fn get_cycle(env: soroban_sdk::Env) -> Result
fn get_round(env: soroban_sdk::Env, id: u64) -> Option

Contribute one share to a NAMED round — any time, any circle

fn contribute(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
    round_id: u64,
) -> Result
fn get_member(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
) -> Result
fn get_roster(
    env: soroban_sdk::Env,
    page: u32,
) -> soroban_sdk::Vec

The circle deployer (system) — the system, the one on-chain role.

fn get_system(
    env: soroban_sdk::Env,
) -> Result

Permissionless, batched TTL rescue: a member can keep their own

fn keep_alive(
    env: soroban_sdk::Env,
    members: soroban_sdk::Vec,
    from_round: u64,
    to_round: u64,
) -> Result<(), soroban_sdk::Error>

Open the next round — the ONE opener in the contract.

fn open_round(
    env: soroban_sdk::Env,
    opens_at: u64,
) -> Result

Void (reset) an unresolved round: every payment refunded in full

fn void_round(
    env: soroban_sdk::Env,
    round_id: u64,
    max_steps: u32,
) -> Result

Which seats have taken a hand in the CURRENT cycle, one bit per slot — the one place that answers "have I had my turn this cycle". Cleared at the turnover.

fn get_received(env: soroban_sdk::Env) -> soroban_sdk::Bytes

The conservation ledger, one call. surplus < 0 = defect; alert.

fn get_solvency(env: soroban_sdk::Env) -> Result

Ask to leave. This FREEZES the member immediately — there is no

fn request_exit(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
) -> Result

Settle the oldest unresolved round. Permissionless, and admitted by

fn settle_round(
    env: soroban_sdk::Env,
    max_steps: u32,
) -> Result

Deploy-time initialization. Runs exactly once, in the deploy

fn __constructor(
    env: soroban_sdk::Env,
    system: soroban_sdk::Address,
    first_member: soroban_sdk::Address,
    token: soroban_sdk::Address,
    fee_account: soroban_sdk::Address,
    policy: Policy,
) -> Result<(), soroban_sdk::Error>
fn get_claimable(env: soroban_sdk::Env, member: soroban_sdk::Address) -> i128

The organiser removes a member. No vote, no automatic trigger.

Nobody is removed AUTOMATICALLY for not paying — there is no violation counter and no auto-kick. A member who does not pay simply blocks the round until they pay after all (a late share cures it), the organiser freezes them (this door), or the organiser resets the round (pause + void_round, system-only). But a circle still needs that door: someone unreachable, someone who asked to leave off-chain, someone who should not have been let in — and, yes, someone stalling a round. In an acquaintance circle that call belongs to the person who assembled it, not to a 60% vote among people who all know each other anyway.

Removal is not confiscation. It goes through the SAME door as a voluntary exit (begin_exit): an IMMEDIATE freeze that drops them from every round's obligations and refunds any contribution they had staged into a live round. The record and its slot are KEPT — slots are never reused, they are the circle's seats for life. Nobody is

fn remove_member(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
) -> Result

The raw obligation bitmap, so the counters above can be checked

fn get_obligation(env: soroban_sdk::Env) -> soroban_sdk::Bytes
fn get_join_amount(env: soroban_sdk::Env) -> Result

The authoritative clock. A round that closes early moves its own

fn get_round_window(env: soroban_sdk::Env) -> Result
fn get_active_policy(env: soroban_sdk::Env) -> Result
fn get_schema_version(env: soroban_sdk::Env) -> u32
fn get_claimable_balance(
    env: soroban_sdk::Env,
    member: soroban_sdk::Address,
) -> Result

Imports

WebAssembly Text (WAT) ▶