Sahel · CLOSED
Borehole and handpump
About this project
A borehole and pump for 290 people near Mopti. Drilling and installation were proved and paid. The water committee was never convened, so the handover tranche went back to donors.
The title, organisation, location, summary and impact above are read out of the text this escrow committed to before its first donation. We hashed that text and it equals the termsHash on chain;no cover photograph is committed yet, so none is shown as the project's own.
- Implementer
- Sahel Water Trust · 0x7099…79C8
- termsHash
- 0x2bb7424d04b6…fe1f ✓
- Cover photograph
- none committed
- Escrow
- 0x245611C250C55716cC6CB2B37394599F86D79379
What has to be proved before each tranche moves
Anyone may assert a stage's outcome against a bond. For an hour anyone may dispute it with a matching bond, or any donor may flag it for free; a dispute goes to a sealed vote of stakers. Then the contract pays the EDE or refunds the donors.
Depth and casing against the drilling log, the collar photograph's GPS against the claim's coordinates, and an accredited lab result for E. coli and nitrate.
0xea3f69be…2efcRead the exact rule
Stage 1, Borehole drilled and water tested. Resolves PASSED if ALL hold: (a) the drilling log records a cased depth of at least 40 m; (b) the collar photograph's GPS is within 500 m of the coordinates registered in this claim; (c) an ISO 17025 accredited laboratory reports E. coli absent in 100 ml and nitrate below 50 mg/l. Source of truth: the drilling log, the geotagged collar photograph and the laboratory certificate anchored in this stage's evidence bundle. Anything else resolves FAILED.
The pump's serial plate against the supplier invoice, and a site photograph showing the apron and soakaway actually built.
0x5a6f891a…5ea7Read the exact rule
Stage 2, Pump, apron and soakaway installed. Resolves PASSED if ALL hold: (a) the pump serial plate legible in the site photograph matches the serial printed on the supplier invoice; (b) the invoice total is within 10% of this tranche; (c) a site photograph shows a completed concrete apron and a soakaway. Source of truth: the supplier invoice and the site photographs anchored in this stage's evidence bundle. Anything else resolves FAILED.
A training register with named attendees, thirty consecutive days of flow logs, and a signed community hand-over.
0x2153fe8b…3da4Read the exact rule
Stage 3, Committee trained and 30 days of verified flow. Resolves PASSED if ALL hold: (a) the training register lists at least 8 named attendees with signatures; (b) the flow log covers 30 consecutive days with no gap longer than 48 hours; (c) the community hand-over record carries at least 5 signatures. Source of truth: the training register, the flow log and the hand-over record anchored in this stage's evidence bundle. Anything else resolves FAILED.
Traceability
Every event this escrow and its vote emitted, in order, from the contracts' own log rather than our database. Open one for the raw entry behind our wording. 47 events, blocks 53–175.
The funding round
Alice donates 20,000.00 EURC (conditional)ContributionReceived2026-11-02 18:05 UTC
A conditional gift: if the work is not delivered, this money comes back to the donor's own wallet.
donor=0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc (Alice) amount=20000000000 class_=0 fallbackTo=0x0000000000000000000000000000000000000000
Bob donates 20,000.00 EURC (conditional)ContributionReceived2026-11-02 18:05 UTC
A conditional gift: if the work is not delivered, this money comes back to the donor's own wallet.
donor=0x976EA74026E726554dB657fA54763abd0C3a0aa9 (Bob) amount=20000000000 class_=0 fallbackTo=0x0000000000000000000000000000000000000000
Carol donates 12,000.00 EURC (irrevocable)ContributionReceived2026-11-02 18:05 UTC
An irrevocable gift: the donor gave up any personal refund at the moment the escrow locked. If the work fails, her share goes to the reallocation pool she nominated here, and it can never be routed to her.
donor=0x14dC79964da2C08b23698B3D3cc7Ca32193d9955 (Carol) amount=12000000000 class_=1 fallbackTo=0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 (Clean Water Reallocation Pool)
Carol donates 12,000.00 EURC (irrevocable)Collateralised2026-11-02 18:05 UTC
An irrevocable gift: the donor gave up any personal refund at the moment the escrow locked. If the work fails, her share goes to the reallocation pool she nominated here, and it can never be routed to her.
totalContributed=52000000000 blockNumber=57
The EDE steps in
The EDE registers itself as the irrevocable payeePayeeRegistered2026-11-02 18:05 UTC
The EDE has already paid the NGO in euros, up front. It now writes its own address into the escrow from its own key. The field is write-once and this contract has no transfer function at all, not a restricted one, none. The IBAN is committed as a salted hash, never in the clear.
payee=0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (Iberia EDE, S.A.) ibanCommitment=0x1cfd4488f9e8106e067acd45ded64fed5a36c1e400912c99f0c88947d3adb5be assignedAmount=52000000000 licenceRef=0x4264452d4544452d363830310000000000000000000000000000000000000000
The EDE confirms the euro advance reached the NGOAdvanceConfirmed2026-11-02 18:05 UTC
50,000.00 EUR left the EDE's account and arrived at the NGO's bank, off-chain. This is the on-chain record that it did. The claim is now EXECUTING and work can start. From here the NGO owes the EDE, and only proved stages repay it.
payee=0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (Iberia EDE, S.A.) advanceRef=0xb6af6a0ae47166e145cc594fdf5c83d00c6ed6e9d62920329a7ccd4689fe47ba
Stage 1, Borehole drilled and water tested
Field Audit Cooperative asserts stage 1 PASSED and bonds 500.00 EURCOutcomeAsserted2026-11-02 18:05 UTC
Depth and water quality confirmed against the stage rule. The assertion names 3 pieces of evidence, reduced to the single root 0x5eaf9728… that went on-chain. Nothing moves yet: a one-hour window opens in which anyone can dispute it with a matching bond, or any donor can flag it for free.
milestoneId=0 asserter=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) passed=true evidenceRoot=0x5eaf9728e57d571f7070570cfe06b95956943b8ac8140e1669988f613122bee7 bond=500000000
Stage 1 → assertedMilestoneStatusChanged2026-11-02 18:05 UTC
milestoneId=0 from=0 to=1
Stage 1 → payableMilestoneStatusChanged2026-11-02 19:26 UTC
milestoneId=0 from=1 to=3
Stage 1 → paidMilestoneStatusChanged2026-11-02 19:26 UTC
milestoneId=0 from=3 to=4
Tranche 1 released, 20,800.00 EURC to the EDE, less feesReleased2026-11-02 19:26 UTC
Anyone may call release(), but it can only ever pay the registered payee. 1.5% goes to the asserter who bonded this outcome and was right, 0.5% to the platform, and the rest to the EDE. The NGO's address never appears as a destination anywhere in this contract.
milestoneId=0 payee=0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (Iberia EDE, S.A.) amount=20800000000
Fees: 312.00 EURC verification to Field Audit Cooperative, 104.00 EURC platformFeesTaken2026-11-02 19:26 UTC
milestoneId=0 verificationTo=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) verification=312000000 platform=104000000
The EDE posts the discharge receipt for tranche 1DischargePosted2026-11-02 19:26 UTC
Informational only, it moves no money. The EDE acknowledges the repayment, and this much of the NGO's debt is extinguished. Any divergence between what the escrow released and what the EDE acknowledges is public.
milestoneId=0 paymentRef=0x7e803ed67228a3391eee6052520f641cd755c5ca0b5758d28df67e48ee7094a7
Field Audit Cooperative's bond returned, the assertion stoodAssertionSettled2026-11-02 19:26 UTC
milestoneId=0 asserter=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) right=true amount=500000000
Stage 2, Pump, apron and soakaway installed
Field Audit Cooperative asserts stage 2 PASSED and bonds 500.00 EURCOutcomeAsserted2026-11-02 19:26 UTC
Installation confirmed against the supplier invoice. The assertion names 3 pieces of evidence, reduced to the single root 0x535da4be… that went on-chain. Nothing moves yet: a one-hour window opens in which anyone can dispute it with a matching bond, or any donor can flag it for free.
milestoneId=1 asserter=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) passed=true evidenceRoot=0x535da4be8e7b68f11141bb5897870953da78b742fb7c51a0091768ae144aec49 bond=500000000
Stage 2 → assertedMilestoneStatusChanged2026-11-02 19:26 UTC
milestoneId=1 from=0 to=1
Mallory disputes stage 2 with a matching 500.00 EURC bondMilestoneChallenged2026-11-02 19:26 UTC
Mallory believes the pump was never installed. Anyone may dispute, including people with no stake in the claim, but it costs the same bond the asserter posted, so whoever turns out wrong loses what the other risked.
milestoneId=1 challenger=0x71bE63f3384f5fb98995898A86B02Fb2426c5788 (Mallory) bond=500000000
Stage 2 → disputedMilestoneStatusChanged2026-11-02 19:26 UTC
milestoneId=1 from=1 to=2
Vote opened on stage 2PollOpened2026-11-02 19:26 UTC
Anyone can open the poll once a stage is disputed, this is not a gatekeeper's decision. Everyone staked in OutcomeVote may vote. A commit window of 10 minutes, then a reveal window of the same length; the whole poll must fit inside the escrow's panel window, or the stage fails to the donors.
key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d escrow=0x245611C250C55716cC6CB2B37394599F86D79379 milestoneId=1 commitDeadline=1793648213 revealDeadline=1793648813
5 staked voters commit sealed votesVoteCommitted ×52026-11-02 19:26 UTC
key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0x2546BcD3c84621e976D8185a91A922aE77ECEc30 (Voter A) milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0xbDA5747bFD65F08deb54cb465eB87D40e51B197E (Voter B) milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0xdD2FD4581271e230360230F9337D5c0430Bf44C0 (Voter C) milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199 (Voter D) milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0x09DB0a93B389bEF724429898f539AEB7ac2Dd55f (Voter E) milestoneId=1
Votes revealed: 4 to uphold, 1 to overturnVoteRevealed ×52026-11-02 19:36 UTC
key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0x2546BcD3c84621e976D8185a91A922aE77ECEc30 (Voter A) uphold=true weight=4000000000 milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0xbDA5747bFD65F08deb54cb465eB87D40e51B197E (Voter B) uphold=true weight=3500000000 milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0xdD2FD4581271e230360230F9337D5c0430Bf44C0 (Voter C) uphold=true weight=3000000000 milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0x8626f6940E2eb28930eFb4CeF49B2d1F2C9C1199 (Voter D) uphold=true weight=2250000000 milestoneId=1 key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0x09DB0a93B389bEF724429898f539AEB7ac2Dd55f (Voter E) uphold=false weight=2000000000 milestoneId=1
Tally: upheld (12,750.00 EURC to 2,000.00 EURC)Ruled2026-11-02 19:47 UTC
key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d upheld=true upholdWeight=12750000000 overturnWeight=2000000000 milestoneId=1
The vote upholds the assertion, stage 2 standsChallengeResolved2026-11-02 19:47 UTC
Four of five voters found the serial plate and the invoice reconcile; the installation is genuine. The tally is permissionless: whoever sends it cannot change it, because the reveals already decided it. OutcomeVote calls the escrow's resolveChallenge in the same transaction.
milestoneId=1 upheld=true
Stage 2 → payableMilestoneStatusChanged2026-11-02 19:47 UTC
milestoneId=1 from=2 to=3
Voter E voted with the minority, slashed 200.00 EURCVoterSettled2026-11-02 19:47 UTC
key=0x5697524f93e337fd046e4e6baff81adf196b4c75144c5202fde8f6adfc23cc2d voter=0x09DB0a93B389bEF724429898f539AEB7ac2Dd55f (Voter E) withMajority=false slashed=200000000 milestoneId=1
Stage 2 → paidMilestoneStatusChanged2026-11-02 19:47 UTC
milestoneId=1 from=3 to=4
Tranche 2 released, 20,800.00 EURC to the EDE, less feesReleased2026-11-02 19:47 UTC
Anyone may call release(), but it can only ever pay the registered payee. 1.5% goes to the asserter who bonded this outcome and was right, 0.5% to the platform, and the rest to the EDE. The NGO's address never appears as a destination anywhere in this contract.
milestoneId=1 payee=0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (Iberia EDE, S.A.) amount=20800000000
Fees: 312.00 EURC verification to Field Audit Cooperative, 104.00 EURC platformFeesTaken2026-11-02 19:47 UTC
milestoneId=1 verificationTo=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) verification=312000000 platform=104000000
The EDE posts the discharge receipt for tranche 2DischargePosted2026-11-02 19:47 UTC
Informational only, it moves no money. The EDE acknowledges the repayment, and this much of the NGO's debt is extinguished. Any divergence between what the escrow released and what the EDE acknowledges is public.
milestoneId=1 paymentRef=0xf677e8f600ed7447a413b85abfd59bef69eb83433e2d8c500947eb12522a0aa1
Field Audit Cooperative's bond returned, the assertion stoodAssertionSettled2026-11-02 19:47 UTC
milestoneId=1 asserter=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) right=true amount=500000000
Mallory's bond is forfeited: half to the voters, half to the asserter she disputedBondSettled2026-11-02 19:47 UTC
The outcome that stood is the one that was asserted, so the dispute lost. Her 500.00 EURC is split between the ruling body and the Field Audit Cooperative, who bonded the truth and had to defend it.
milestoneId=1 challenger=0x71bE63f3384f5fb98995898A86B02Fb2426c5788 (Mallory) won=false amount=500000000
Stage 3, Committee trained, 30 days of verified flow
Field Audit Cooperative asserts stage 3 FAILED and bonds 500.00 EURCOutcomeAsserted2026-11-02 20:48 UTC
The committee was never convened and flow logging stopped after four days. The assertion names 3 pieces of evidence, reduced to the single root 0xa60e6a68… that went on-chain. Nothing moves yet: a one-hour window opens in which anyone can dispute it with a matching bond, or any donor can flag it for free.
milestoneId=2 asserter=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) passed=false evidenceRoot=0xa60e6a682f88385191689885674e4a852aeaddcaec757ce2bcb1a921f8e120a8 bond=500000000
Stage 3 → assertedMilestoneStatusChanged2026-11-02 20:48 UTC
milestoneId=2 from=0 to=1
Stage 3 → FAILEDMilestoneStatusChanged2026-11-02 21:49 UTC
milestoneId=2 from=1 to=5
Field Audit Cooperative's bond returned, the assertion stoodAssertionSettled2026-11-02 21:49 UTC
milestoneId=2 asserter=0xdF3e18d64BC6A983f673Ab319CCaE4f1a57C7097 (Field Audit Cooperative) right=true amount=500000000
Settlement
Claim closedClaimClosed2026-11-02 21:49 UTC
Every stage has reached a terminal state. The escrow's books are final.
releasedTotal=41600000000 refundPool=10400000000
Refund of 4,000.00 EURC paid out for Alice → AliceRefundClaimed2027-10-28 18:06 UTC
Pro-rata share of the refund pool: pool × this donor's contribution ÷ total contributed. Anyone may trigger the payout, but it can only ever land in the donor's own wallet.
donor=0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc (Alice) recipient=0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc (Alice) amount=4000000000 class_=0
Refund of 4,000.00 EURC paid out for Bob → BobRefundClaimed2027-10-28 18:06 UTC
Pro-rata share of the refund pool: pool × this donor's contribution ÷ total contributed. Anyone may trigger the payout, but it can only ever land in the donor's own wallet.
donor=0x976EA74026E726554dB657fA54763abd0C3a0aa9 (Bob) recipient=0x976EA74026E726554dB657fA54763abd0C3a0aa9 (Bob) amount=4000000000 class_=0
Refund of 2,400.00 EURC paid out for Carol → Clean Water Reallocation PoolRefundClaimed2027-10-28 18:06 UTC
Carol gave irrevocably, so her share is routed to the pool she nominated. The contract decides this by donation class, never by who calls the function, she could call it herself and the money would still go to the pool.
donor=0x14dC79964da2C08b23698B3D3cc7Ca32193d9955 (Carol) recipient=0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 (Clean Water Reallocation Pool) amount=2400000000 class_=1
Check everything yourselfWhere every token went, and the full text this escrow committed to.for auditors
Where the money went
From the stablecoin's own Transfer log, not our accounting.
✓ In minus out equals the balance (54,000.00 EURC − 54,000.00 EURC = 0.00 EURC).
The text this escrow committed to
PROVEIT project terms v2 claim: well-partial title: Borehole and handpump implementer: Sahel Water Trust location: Mopti, Mali (14.4900, -4.1800) summary: A borehole and pump for 290 people near Mopti. Drilling and installation were proved and paid. The water committee was never convened, so the handover tranche went back to donors. impact: 290 people with a working pump | 2 of 3 stages delivered | 10,400 EURC refunded cover: keccak256 0x71eb2afb49478b01239c062ed41b96dcfe97cb4a5015246a445a55aa1085d092 of projects/well-partial/cover.jpg fees: works=48960.00 EUR | financing=2000.00 EUR | verification=780.00 EUR | platform=260.00 EUR | target=52000.00 EUR | tranches=20800.00/20800.00/10400.00 EUR | discount to EDE=2000.00 EUR (3.846% of target), charged once, outcome-independent conditions: verification=1.50% and platform=0.50% of each tranche, taken by the contract on release only | a failed tranche refunds in full, fee lines included | donor pays 0.00 EUR in fees; 100% of a refund returns to the donor or their nominated fallback
✓ This exact text hashes to 0x2bb7424d04b6…fe1f, the termsHash written into the escrow before the first donation. Change one character (a place name, a fee, the cover photograph) and the match fails.