@useaccord/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +126 -0
- package/dist/accord.d.ts +43 -0
- package/dist/accord.d.ts.map +1 -0
- package/dist/adapter.d.ts +39 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/chunk-7QVYU63E.js +7 -0
- package/dist/chunk-7QVYU63E.js.map +1 -0
- package/dist/constants.d.ts +83 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/domain.d.ts +73 -0
- package/dist/domain.d.ts.map +1 -0
- package/dist/errors.d.ts +64 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/evidence/crypto.d.ts +12 -0
- package/dist/evidence/crypto.d.ts.map +1 -0
- package/dist/evidence/ecies.d.ts +45 -0
- package/dist/evidence/ecies.d.ts.map +1 -0
- package/dist/evidence/fetch.d.ts +20 -0
- package/dist/evidence/fetch.d.ts.map +1 -0
- package/dist/evidence/index.d.ts +27 -0
- package/dist/evidence/index.d.ts.map +1 -0
- package/dist/evidence/index.js +392 -0
- package/dist/evidence/index.js.map +1 -0
- package/dist/evidence/keys.d.ts +33 -0
- package/dist/evidence/keys.d.ts.map +1 -0
- package/dist/evidence/manifest.d.ts +47 -0
- package/dist/evidence/manifest.d.ts.map +1 -0
- package/dist/evidence/options.d.ts +14 -0
- package/dist/evidence/options.d.ts.map +1 -0
- package/dist/evidence/parse.d.ts +39 -0
- package/dist/evidence/parse.d.ts.map +1 -0
- package/dist/evidence/publish.d.ts +45 -0
- package/dist/evidence/publish.d.ts.map +1 -0
- package/dist/fetch.d.ts +24 -0
- package/dist/fetch.d.ts.map +1 -0
- package/dist/generated/accounts/accordState.d.ts +58 -0
- package/dist/generated/accounts/accordState.d.ts.map +1 -0
- package/dist/generated/accounts/appealBond.d.ts +61 -0
- package/dist/generated/accounts/appealBond.d.ts.map +1 -0
- package/dist/generated/accounts/dispute.d.ts +213 -0
- package/dist/generated/accounts/dispute.d.ts.map +1 -0
- package/dist/generated/accounts/index.d.ts +15 -0
- package/dist/generated/accounts/index.d.ts.map +1 -0
- package/dist/generated/accounts/jurorStake.d.ts +137 -0
- package/dist/generated/accounts/jurorStake.d.ts.map +1 -0
- package/dist/generated/accounts/pendingUpdate.d.ts +43 -0
- package/dist/generated/accounts/pendingUpdate.d.ts.map +1 -0
- package/dist/generated/accounts/round.d.ts +143 -0
- package/dist/generated/accounts/round.d.ts.map +1 -0
- package/dist/generated/accounts/subaccord.d.ts +300 -0
- package/dist/generated/accounts/subaccord.d.ts.map +1 -0
- package/dist/generated/errors/accord.d.ts +160 -0
- package/dist/generated/errors/accord.d.ts.map +1 -0
- package/dist/generated/errors/index.d.ts +9 -0
- package/dist/generated/errors/index.d.ts.map +1 -0
- package/dist/generated/index.d.ts +14 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/instructions/appeal.d.ts +107 -0
- package/dist/generated/instructions/appeal.d.ts.map +1 -0
- package/dist/generated/instructions/cancelDispute.d.ts +73 -0
- package/dist/generated/instructions/cancelDispute.d.ts.map +1 -0
- package/dist/generated/instructions/claimAppealRefund.d.ts +91 -0
- package/dist/generated/instructions/claimAppealRefund.d.ts.map +1 -0
- package/dist/generated/instructions/commit.d.ts +50 -0
- package/dist/generated/instructions/commit.d.ts.map +1 -0
- package/dist/generated/instructions/commitVrfCallback.d.ts +47 -0
- package/dist/generated/instructions/commitVrfCallback.d.ts.map +1 -0
- package/dist/generated/instructions/createDispute.d.ts +136 -0
- package/dist/generated/instructions/createDispute.d.ts.map +1 -0
- package/dist/generated/instructions/createSubaccord.d.ts +196 -0
- package/dist/generated/instructions/createSubaccord.d.ts.map +1 -0
- package/dist/generated/instructions/drawSeat.d.ts +74 -0
- package/dist/generated/instructions/drawSeat.d.ts.map +1 -0
- package/dist/generated/instructions/executeSubaccordUpdate.d.ts +43 -0
- package/dist/generated/instructions/executeSubaccordUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/executeUnpause.d.ts +59 -0
- package/dist/generated/instructions/executeUnpause.d.ts.map +1 -0
- package/dist/generated/instructions/finalizeDispute.d.ts +46 -0
- package/dist/generated/instructions/finalizeDispute.d.ts.map +1 -0
- package/dist/generated/instructions/finalizeRound.d.ts +46 -0
- package/dist/generated/instructions/finalizeRound.d.ts.map +1 -0
- package/dist/generated/instructions/getRuling.d.ts +42 -0
- package/dist/generated/instructions/getRuling.d.ts.map +1 -0
- package/dist/generated/instructions/health.d.ts +37 -0
- package/dist/generated/instructions/health.d.ts.map +1 -0
- package/dist/generated/instructions/index.d.ts +37 -0
- package/dist/generated/instructions/index.d.ts.map +1 -0
- package/dist/generated/instructions/initializePause.d.ts +51 -0
- package/dist/generated/instructions/initializePause.d.ts.map +1 -0
- package/dist/generated/instructions/pause.d.ts +47 -0
- package/dist/generated/instructions/pause.d.ts.map +1 -0
- package/dist/generated/instructions/proposeSubaccordUpdate.d.ts +90 -0
- package/dist/generated/instructions/proposeSubaccordUpdate.d.ts.map +1 -0
- package/dist/generated/instructions/proposeUnpause.d.ts +47 -0
- package/dist/generated/instructions/proposeUnpause.d.ts.map +1 -0
- package/dist/generated/instructions/pruneJuror.d.ts +68 -0
- package/dist/generated/instructions/pruneJuror.d.ts.map +1 -0
- package/dist/generated/instructions/reclaimSlot.d.ts +48 -0
- package/dist/generated/instructions/reclaimSlot.d.ts.map +1 -0
- package/dist/generated/instructions/reconcileStake.d.ts +48 -0
- package/dist/generated/instructions/reconcileStake.d.ts.map +1 -0
- package/dist/generated/instructions/redraw.d.ts +86 -0
- package/dist/generated/instructions/redraw.d.ts.map +1 -0
- package/dist/generated/instructions/requestVrf.d.ts +71 -0
- package/dist/generated/instructions/requestVrf.d.ts.map +1 -0
- package/dist/generated/instructions/requestWithdraw.d.ts +61 -0
- package/dist/generated/instructions/requestWithdraw.d.ts.map +1 -0
- package/dist/generated/instructions/reveal.d.ts +53 -0
- package/dist/generated/instructions/reveal.d.ts.map +1 -0
- package/dist/generated/instructions/settleRound.d.ts +60 -0
- package/dist/generated/instructions/settleRound.d.ts.map +1 -0
- package/dist/generated/instructions/stake.d.ts +98 -0
- package/dist/generated/instructions/stake.d.ts.map +1 -0
- package/dist/generated/instructions/withdraw.d.ts +67 -0
- package/dist/generated/instructions/withdraw.d.ts.map +1 -0
- package/dist/generated/instructions/withdrawFees.d.ts +67 -0
- package/dist/generated/instructions/withdrawFees.d.ts.map +1 -0
- package/dist/generated/pdas/accordState.d.ts +12 -0
- package/dist/generated/pdas/accordState.d.ts.map +1 -0
- package/dist/generated/pdas/appealBond.d.ts +16 -0
- package/dist/generated/pdas/appealBond.d.ts.map +1 -0
- package/dist/generated/pdas/dispute.d.ts +16 -0
- package/dist/generated/pdas/dispute.d.ts.map +1 -0
- package/dist/generated/pdas/index.d.ts +16 -0
- package/dist/generated/pdas/index.d.ts.map +1 -0
- package/dist/generated/pdas/jurorStake.d.ts +16 -0
- package/dist/generated/pdas/jurorStake.d.ts.map +1 -0
- package/dist/generated/pdas/pendingUpdate.d.ts +16 -0
- package/dist/generated/pdas/pendingUpdate.d.ts.map +1 -0
- package/dist/generated/pdas/programIdentity.d.ts +12 -0
- package/dist/generated/pdas/programIdentity.d.ts.map +1 -0
- package/dist/generated/pdas/round.d.ts +16 -0
- package/dist/generated/pdas/round.d.ts.map +1 -0
- package/dist/generated/pdas/subaccord.d.ts +16 -0
- package/dist/generated/pdas/subaccord.d.ts.map +1 -0
- package/dist/generated/programs/accord.d.ts +182 -0
- package/dist/generated/programs/accord.d.ts.map +1 -0
- package/dist/generated/programs/index.d.ts +9 -0
- package/dist/generated/programs/index.d.ts.map +1 -0
- package/dist/generated/types/aggregation.d.ts +25 -0
- package/dist/generated/types/aggregation.d.ts.map +1 -0
- package/dist/generated/types/caseTerms.d.ts +87 -0
- package/dist/generated/types/caseTerms.d.ts.map +1 -0
- package/dist/generated/types/disputeState.d.ts +34 -0
- package/dist/generated/types/disputeState.d.ts.map +1 -0
- package/dist/generated/types/index.d.ts +15 -0
- package/dist/generated/types/index.d.ts.map +1 -0
- package/dist/generated/types/leafClaim.d.ts +27 -0
- package/dist/generated/types/leafClaim.d.ts.map +1 -0
- package/dist/generated/types/mSTNode.d.ts +26 -0
- package/dist/generated/types/mSTNode.d.ts.map +1 -0
- package/dist/generated/types/shortfallPolicy.d.ts +23 -0
- package/dist/generated/types/shortfallPolicy.d.ts.map +1 -0
- package/dist/generated/types/updatePayload.d.ts +107 -0
- package/dist/generated/types/updatePayload.d.ts.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8714 -0
- package/dist/index.js.map +1 -0
- package/dist/methods/appeal.d.ts +131 -0
- package/dist/methods/appeal.d.ts.map +1 -0
- package/dist/methods/dispute.d.ts +177 -0
- package/dist/methods/dispute.d.ts.map +1 -0
- package/dist/methods/disputePhase.d.ts +34 -0
- package/dist/methods/disputePhase.d.ts.map +1 -0
- package/dist/methods/lifecycle.d.ts +228 -0
- package/dist/methods/lifecycle.d.ts.map +1 -0
- package/dist/methods/mst.d.ts +100 -0
- package/dist/methods/mst.d.ts.map +1 -0
- package/dist/methods/settlement.d.ts +69 -0
- package/dist/methods/settlement.d.ts.map +1 -0
- package/dist/methods/stakeFlow.d.ts +65 -0
- package/dist/methods/stakeFlow.d.ts.map +1 -0
- package/dist/methods/staking.d.ts +220 -0
- package/dist/methods/staking.d.ts.map +1 -0
- package/dist/methods/voting.d.ts +227 -0
- package/dist/methods/voting.d.ts.map +1 -0
- package/dist/methods/vrf.d.ts +143 -0
- package/dist/methods/vrf.d.ts.map +1 -0
- package/dist/methods.d.ts +79 -0
- package/dist/methods.d.ts.map +1 -0
- package/dist/pda.d.ts +37 -0
- package/dist/pda.d.ts.map +1 -0
- package/dist/queries.d.ts +27 -0
- package/dist/queries.d.ts.map +1 -0
- package/dist/query.d.ts +30 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/token.d.ts +24 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/types.d.ts +19 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/wallet.d.ts +30 -0
- package/dist/wallet.d.ts.map +1 -0
- package/package.json +45 -0
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# @useaccord/sdk
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for the **VeriDAO Accord** — a Schelling-point arbitration
|
|
4
|
+
primitive on Solana (Anchor). Any program (the _Arbitrable_) files a Dispute
|
|
5
|
+
via CPI; the Accord draws stake-weighted Jurors (Switchboard VRF), collects
|
|
6
|
+
commit-reveal votes, and emits a Ruling the filer reads lazily.
|
|
7
|
+
|
|
8
|
+
Built on [Solana Kit](https://github.com/anza-xyz/kit) (`@solana/kit`) with a
|
|
9
|
+
[Codama](https://github.com/codama-idl/codama)-generated client + a hand-written
|
|
10
|
+
`Accord` facade. No `@coral-xyz/anchor` runtime, no `@solana/web3.js`.
|
|
11
|
+
|
|
12
|
+
> **Architecture spec:** [ADR-0010](../apps/docs/docs/adr/0010-sdk-codama-solana-kit-facade.md)
|
|
13
|
+
|
|
14
|
+
## Install
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pnpm add @useaccord/sdk @solana/kit
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick start
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
import { Accord } from "@useaccord/sdk";
|
|
24
|
+
import { createKeyPairSignerFromBytes } from "@solana/kit";
|
|
25
|
+
import { readFileSync } from "node:fs";
|
|
26
|
+
|
|
27
|
+
const signer = await createKeyPairSignerFromBytes(
|
|
28
|
+
new Uint8Array(JSON.parse(readFileSync("~/.config/solana/id.json", "utf-8"))),
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const accord = new Accord({
|
|
32
|
+
endpoint: process.env.RPC_URL!, // e.g. local validator or Solana RPC
|
|
33
|
+
signer,
|
|
34
|
+
});
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Arbitrable CPI API
|
|
38
|
+
|
|
39
|
+
The two-method surface for programs that want dispute resolution:
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
// File a dispute (the Arbitrable calls this via CPI)
|
|
43
|
+
import { createDispute } from "@useaccord/sdk";
|
|
44
|
+
const { instruction, dispute } = await createDispute(
|
|
45
|
+
accord.adapter,
|
|
46
|
+
accord.PROGRAM_ID,
|
|
47
|
+
{ subaccord, filer: payer.address, options: 2, evidenceHash, fee },
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
// Read the ruling (lazy — returns null until finalized)
|
|
51
|
+
import { fetchDisputeMaybe } from "@useaccord/sdk";
|
|
52
|
+
const disputeAccount = await fetchDisputeMaybe(accord, dispute);
|
|
53
|
+
if (disputeAccount?.exists) {
|
|
54
|
+
console.log(disputeAccount.data.finalRuling); // bigint | null
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Method groups
|
|
59
|
+
|
|
60
|
+
The `methods` namespace covers all eight instruction groups. Each returns a Kit
|
|
61
|
+
`Instruction` — the caller signs and sends it.
|
|
62
|
+
|
|
63
|
+
```typescript
|
|
64
|
+
// Subaccord lifecycle + circuit breaker
|
|
65
|
+
import { createSubaccord, initializePause, pause } from "@useaccord/sdk";
|
|
66
|
+
|
|
67
|
+
// Staking
|
|
68
|
+
import { stake, unstake } from "@useaccord/sdk";
|
|
69
|
+
|
|
70
|
+
// Dispute filing
|
|
71
|
+
import { createDispute } from "@useaccord/sdk";
|
|
72
|
+
|
|
73
|
+
// Snapshot trust (ADR-0009 sortition)
|
|
74
|
+
import {
|
|
75
|
+
postSnapshot,
|
|
76
|
+
challengeSnapshot,
|
|
77
|
+
finalizeSnapshot,
|
|
78
|
+
} from "@useaccord/sdk";
|
|
79
|
+
|
|
80
|
+
// VRF + draw
|
|
81
|
+
import { requestVrf, draw, resolvePanel } from "@useaccord/sdk";
|
|
82
|
+
|
|
83
|
+
// Commit-reveal voting
|
|
84
|
+
import { commit, reveal, commitHash } from "@useaccord/sdk";
|
|
85
|
+
|
|
86
|
+
// Appeals
|
|
87
|
+
import { appeal, claimAppealRefund } from "@useaccord/sdk";
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## PDA helpers
|
|
91
|
+
|
|
92
|
+
```typescript
|
|
93
|
+
import {
|
|
94
|
+
findSubaccordPda,
|
|
95
|
+
findDisputePda,
|
|
96
|
+
findJurorStakePda,
|
|
97
|
+
findAccordStatePda,
|
|
98
|
+
} from "@useaccord/sdk";
|
|
99
|
+
|
|
100
|
+
const [pda] = await findSubaccordPda(accord.PROGRAM_ID, creator, domainRef);
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Client-side crypto
|
|
104
|
+
|
|
105
|
+
The SDK implements the off-chain logic that supports on-chain verification:
|
|
106
|
+
|
|
107
|
+
- **Commit hash:** `sha256(vote_byte | salt[32] | juror_pubkey[32])` — matches
|
|
108
|
+
the program's `hashv` on-chain.
|
|
109
|
+
- **Merkle-Sum Tree:** `buildMst` + `proveMembership` + `selectSlot` produce the
|
|
110
|
+
`JurorMembership` structs the `draw` instruction verifies (ADR-0009).
|
|
111
|
+
- **Panel resolution:** `resolvePanel` retries on collision using the committed
|
|
112
|
+
VRF, incrementing `draw_attempt` without re-requesting randomness.
|
|
113
|
+
|
|
114
|
+
## Building from source
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
make codegen # anchor build --ignore-keys -> IDL -> Codama client
|
|
118
|
+
make sdk # tsc build the SDK package
|
|
119
|
+
make lint # typecheck
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
`src/generated/` is committed; regenerate via `make codegen` after program changes.
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT
|
package/dist/accord.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accord facade — the primary consumer surface for the VeriDAO Accord SDK.
|
|
3
|
+
*
|
|
4
|
+
* Composes the generated Codama Kit client with domain-level orchestration.
|
|
5
|
+
* Method-group modules (`src/methods/*.ts`) are standalone functions that take
|
|
6
|
+
* the facade's client + args; this class pre-wires delegation to each group.
|
|
7
|
+
*
|
|
8
|
+
* @see ADR-0010
|
|
9
|
+
*/
|
|
10
|
+
import { type Address, type Rpc, type SolanaRpcApi, type TransactionSigner } from "@solana/kit";
|
|
11
|
+
import { accordProgram } from "./generated/programs/accord";
|
|
12
|
+
import { type AccordAdapter } from "./adapter.js";
|
|
13
|
+
import { type AccordMethods } from "./methods.js";
|
|
14
|
+
/** A Kit client extended with the Accord plugin. */
|
|
15
|
+
export type AccordClient = ReturnType<ReturnType<typeof accordProgram>>;
|
|
16
|
+
export interface AccordConfig {
|
|
17
|
+
/** JSON-RPC endpoint (e.g. "http://localhost:8899"). */
|
|
18
|
+
endpoint: string;
|
|
19
|
+
/** A Kit TransactionSigner (from wallet.ts or @solana/kit). */
|
|
20
|
+
signer: TransactionSigner;
|
|
21
|
+
}
|
|
22
|
+
export declare class Accord {
|
|
23
|
+
/** The canonical Accord program address. */
|
|
24
|
+
static readonly PROGRAM_ID: Address<"cordhVoshqRV6kzGBmM89A66wuusJGsDCvLMHPLyKed">;
|
|
25
|
+
readonly rpc: Rpc<SolanaRpcApi>;
|
|
26
|
+
readonly signer: TransactionSigner;
|
|
27
|
+
readonly client: AccordClient;
|
|
28
|
+
private _adapter?;
|
|
29
|
+
constructor(config: AccordConfig);
|
|
30
|
+
/**
|
|
31
|
+
* The concrete seam adapter — implements all seven `Accord*Client` seams
|
|
32
|
+
* against the generated Codama client. Pass to the pure orchestration
|
|
33
|
+
* functions in `src/methods/*.ts`, or use {@link methods} for bound helpers.
|
|
34
|
+
*/
|
|
35
|
+
get adapter(): AccordAdapter;
|
|
36
|
+
/**
|
|
37
|
+
* Bound orchestration namespace covering all eight method groups. Each helper
|
|
38
|
+
* validates (pure) + builds the instruction via {@link adapter}; the caller
|
|
39
|
+
* signs + sends the returned `Instruction` with `this.signer`.
|
|
40
|
+
*/
|
|
41
|
+
get methods(): AccordMethods;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=accord.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accord.d.ts","sourceRoot":"","sources":["../src/accord.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,aAAa,EAGd,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAEvE,oDAAoD;AACpD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,+DAA+D;IAC/D,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED,qBAAa,MAAM;IACjB,4CAA4C;IAC5C,MAAM,CAAC,QAAQ,CAAC,UAAU,yDAAqB;IAE/C,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B,OAAO,CAAC,QAAQ,CAAC,CAAgB;gBAErB,MAAM,EAAE,YAAY;IAWhC;;;;OAIG;IACH,IAAI,OAAO,IAAI,aAAa,CAG3B;IAED;;;;OAIG;IACH,IAAI,OAAO,IAAI,aAAa,CAE3B;CACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Concrete adapter — wires every `Accord*Client` seam (declared by the
|
|
3
|
+
* `src/methods/*.ts` modules) to the Codama-generated Solana Kit client.
|
|
4
|
+
*
|
|
5
|
+
* The method modules stay pure orchestration over typed seams; this module is
|
|
6
|
+
* the single implementor the {@link Accord} facade binds. Each seam method maps
|
|
7
|
+
* 1:1 to a generated `getXxxInstruction` builder (sync, all-explicit accounts)
|
|
8
|
+
* or to a generated account fetcher, so a drift in the IDL surfaces here as a
|
|
9
|
+
* compile error — exactly the ADR-0010 guarantee.
|
|
10
|
+
*
|
|
11
|
+
* ADR-0012: the snapshot trio (post/challenge/finalize) and the one-shot `draw`
|
|
12
|
+
* are gone; `stake`/`unstake` thread an accumulator `path`; `draw_seat` fills
|
|
13
|
+
* the panel one seat per tx against `dispute.frozen_root`; `commit_vrf_callback`
|
|
14
|
+
* (invoked by the oracle) freezes the root.
|
|
15
|
+
*
|
|
16
|
+
* Signing model: the facade's loaded wallet (`accord.signer`) is the
|
|
17
|
+
* `TransactionSigner` for every instruction's signing account.
|
|
18
|
+
*
|
|
19
|
+
* @see ADR-0010, ADR-0012
|
|
20
|
+
*/
|
|
21
|
+
import type { Accord } from "./accord.js";
|
|
22
|
+
import type { AccordAppealClient } from "./methods/appeal.js";
|
|
23
|
+
import type { AccordDisputeClient } from "./methods/dispute.js";
|
|
24
|
+
import type { AccordLifecycleClient } from "./methods/lifecycle.js";
|
|
25
|
+
import type { AccordStakingClient } from "./methods/staking.js";
|
|
26
|
+
import type { AccordSettlementClient } from "./methods/settlement.js";
|
|
27
|
+
import type { AccordVotingClient, VotingAccounts } from "./methods/voting.js";
|
|
28
|
+
import type { AccordVrfClient, SeatMembership, VrfDrawAccounts } from "./methods/vrf.js";
|
|
29
|
+
/** Union of every seam the adapter implements. */
|
|
30
|
+
export interface AccordAdapter extends AccordDisputeClient, AccordLifecycleClient, AccordStakingClient, AccordSettlementClient, AccordVrfClient, AccordVotingClient, AccordAppealClient {
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build the concrete adapter bound to an {@link Accord} facade instance. The
|
|
34
|
+
* returned object satisfies all six `Accord*Client` seams, so the pure
|
|
35
|
+
* orchestration functions in `src/methods/*.ts` can drive the chain end-to-end.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createAccordAdapter(accord: Accord): AccordAdapter;
|
|
38
|
+
export type { SeatMembership, VrfDrawAccounts, VotingAccounts };
|
|
39
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAWH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAgC1C,OAAO,KAAK,EACV,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,qBAAqB,EAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,sBAAsB,EAGvB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,kDAAkD;AAClD,MAAM,WAAW,aACf,SACE,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,kBAAkB,EAClB,kBAAkB;CAAG;AAEzB;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CA6YjE;AAiHD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
/**
|
|
3
|
+
* v1 protocol constants and defaults.
|
|
4
|
+
*
|
|
5
|
+
* Sourced from `programs/accord/src/constants.rs` and AGENTS.md "v1 Defaults".
|
|
6
|
+
* Per-Subaccord params are configurable at creation; these are the milestone
|
|
7
|
+
* defaults.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_JURORS = 31;
|
|
10
|
+
export declare const MAX_APPEALS = 3;
|
|
11
|
+
export declare const MAX_OPTIONS = 8;
|
|
12
|
+
export declare const UPDATE_TIMELOCK_SLOTS = 432000n;
|
|
13
|
+
export declare const UNPAUSE_TIMELOCK_SLOTS = 216000n;
|
|
14
|
+
/** Default appeal window (ADR-0022). Per-Subaccord now; this is the
|
|
15
|
+
* `createSubaccord` default + the "v1 default" the docs cite — the runtime
|
|
16
|
+
* value is `dispute.terms.appealWindow` (frozen at filing). 3 days. */
|
|
17
|
+
export declare const DEFAULT_APPEAL_WINDOW_SECS = 259200n;
|
|
18
|
+
/** Floor on the per-Subaccord appeal window (ADR-0022). 1 hour. */
|
|
19
|
+
export declare const MIN_APPEAL_WINDOW_SECS = 3600n;
|
|
20
|
+
/**
|
|
21
|
+
* Maximum tree depth that fits a `stake`/`requestWithdraw`/`reconcileStake`
|
|
22
|
+
* instruction within the 1232-byte serialized transaction limit when signed
|
|
23
|
+
* via a browser wallet. The MST proof is `depth × 40` bytes of instruction
|
|
24
|
+
* data; the `stake` ix has ~490 bytes of fixed overhead (7 accounts + headers
|
|
25
|
+
* + discriminator + amount). `490 + depth×40 ≤ 1232` ⇒ depth ≤ 18, but we
|
|
26
|
+
* cap at 16 (102-byte margin) for safety.
|
|
27
|
+
*/
|
|
28
|
+
export declare const MAX_SAFE_TREE_DEPTH = 16;
|
|
29
|
+
/**
|
|
30
|
+
* Default Merkle accumulator tree depth. 2^16 = 65,536 seats; per-Subaccord.
|
|
31
|
+
* Capped at {@link MAX_SAFE_TREE_DEPTH} so browser-wallet signing works.
|
|
32
|
+
*/
|
|
33
|
+
export declare const DEFAULT_TREE_DEPTH = 16;
|
|
34
|
+
/**
|
|
35
|
+
* Round-1 juror panel size (ADR-0019). Fixed protocol constant — not
|
|
36
|
+
* per-Subaccord configurable. The appeal ladder grows it via `2N+1`:
|
|
37
|
+
* 3 → 7 → 15 → 31 (the last exactly fills `MAX_JURORS` at `max_appeals = 3`).
|
|
38
|
+
*/
|
|
39
|
+
export declare const INITIAL_NUM_JURORS = 3;
|
|
40
|
+
export declare const DEFAULT_ALPHA_BPS = 1000;
|
|
41
|
+
export declare const DEFAULT_REVIEW_WINDOW_SECS = 604800n;
|
|
42
|
+
export declare const DEFAULT_COMMIT_WINDOW_SECS = 172800n;
|
|
43
|
+
export declare const DEFAULT_REVEAL_WINDOW_SECS = 172800n;
|
|
44
|
+
export declare const DEFAULT_MAX_APPEALS = 3;
|
|
45
|
+
/**
|
|
46
|
+
* Default reveal-quorum fraction in bps (ADR-0021): 6_666 = 2/3. A round is
|
|
47
|
+
* authoritative only once `reveal_count >= ceil(panel × bps / 10_000)`.
|
|
48
|
+
*/
|
|
49
|
+
export declare const DEFAULT_REVEAL_THRESHOLD_BPS = 6666;
|
|
50
|
+
/** Program ceiling on per-round redraw attempts (bounds the redraw ladder). */
|
|
51
|
+
export declare const MAX_DRAW_ATTEMPTS = 10;
|
|
52
|
+
/** Default same-size redraw cap per round before a dispute fails (ADR-0021). */
|
|
53
|
+
export declare const DEFAULT_MAX_DRAW_ATTEMPTS = 3;
|
|
54
|
+
/**
|
|
55
|
+
* Default `Median` coherence tolerance in bps (ADR-0025): a revealed vote is
|
|
56
|
+
* coherent iff `|vote − ruling| · 10_000 ≤ ruling · coherence_tol_bps`. 100 =
|
|
57
|
+
* a 1% band around the final median. Inert for `Plurality` (exact option
|
|
58
|
+
* equality) — Plurality-only pools pass `0`.
|
|
59
|
+
*/
|
|
60
|
+
export declare const DEFAULT_COHERENCE_TOL_BPS = 100;
|
|
61
|
+
export declare const DEFAULT_MIN_STAKE = 1000n;
|
|
62
|
+
export declare const DEFAULT_FEE_PER_JUROR = 0n;
|
|
63
|
+
/**
|
|
64
|
+
* Panel size for round `roundIdx`, seeded by `baseJurySize` (the Subaccord's
|
|
65
|
+
* `min_jury_size`). Defaults to {@link INITIAL_NUM_JURORS} (=3) for backward
|
|
66
|
+
* compatibility — pass the Subaccord's value explicitly for non-default pools.
|
|
67
|
+
*/
|
|
68
|
+
export declare function panelSizeForRound(roundIdx: number, baseJurySize?: number): number | null;
|
|
69
|
+
/**
|
|
70
|
+
* Largest panel a Subaccord with `maxAppeals` appeals can reach, seeded by
|
|
71
|
+
* `baseJurySize` (the Subaccord's `min_jury_size`). Defaults to
|
|
72
|
+
* {@link INITIAL_NUM_JURORS} (=3).
|
|
73
|
+
*/
|
|
74
|
+
export declare function maxAppealPanelSize(maxAppeals: number, baseJurySize?: number): number;
|
|
75
|
+
/** Mainnet/devnet base-layer VRF oracle queue (`DEFAULT_QUEUE`). */
|
|
76
|
+
export declare const VRF_ORACLE_QUEUE: Address;
|
|
77
|
+
/** Mainnet/devnet delegated (ephemeral rollup) VRF oracle queue (`DEFAULT_EPHEMERAL_QUEUE`). */
|
|
78
|
+
export declare const VRF_ORACLE_EPHEMERAL_QUEUE: Address;
|
|
79
|
+
/** Localnet base-layer test VRF oracle queue (`DEFAULT_TEST_QUEUE`). */
|
|
80
|
+
export declare const VRF_ORACLE_TEST_QUEUE: Address;
|
|
81
|
+
/** Localnet delegated (ephemeral rollup) test VRF oracle queue (`DEFAULT_EPHEMERAL_TEST_QUEUE`). */
|
|
82
|
+
export declare const VRF_ORACLE_EPHEMERAL_TEST_QUEUE: Address;
|
|
83
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;GAMG;AAIH,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,IAAI,CAAC;AAI7B,eAAO,MAAM,qBAAqB,UAAW,CAAC;AAC9C,eAAO,MAAM,sBAAsB,UAAW,CAAC;AAI/C;;wEAEwE;AACxE,eAAO,MAAM,0BAA0B,UAAW,CAAC;AACnD,mEAAmE;AACnE,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAI7C;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAIrC;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,iBAAiB,OAAQ,CAAC;AACvC,eAAO,MAAM,0BAA0B,UAAW,CAAC;AACnD,eAAO,MAAM,0BAA0B,UAAW,CAAC;AACnD,eAAO,MAAM,0BAA0B,UAAW,CAAC;AACnD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC;;;GAGG;AACH,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAClD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAMxC;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAA2B,GACxC,MAAM,GAAG,IAAI,CAcf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,YAAY,GAAE,MAA2B,GACxC,MAAM,CAGR;AAWD,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,EACuB,OAAO,CAAC;AAC5D,gGAAgG;AAChG,eAAO,MAAM,0BAA0B,EACa,OAAO,CAAC;AAC5D,wEAAwE;AACxE,eAAO,MAAM,qBAAqB,EACkB,OAAO,CAAC;AAC5D,oGAAoG;AACpG,eAAO,MAAM,+BAA+B,EACO,OAAO,CAAC"}
|
package/dist/domain.d.ts
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/** Parsed domain document: optional frontmatter metadata + the body. */
|
|
2
|
+
export interface ParsedDomainDoc {
|
|
3
|
+
title?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
body: string;
|
|
6
|
+
}
|
|
7
|
+
/** Result of fetching a domain doc from the daemon: verified bytes + parse. */
|
|
8
|
+
export interface FetchedDomainDoc {
|
|
9
|
+
bytes: Uint8Array;
|
|
10
|
+
contentType: string;
|
|
11
|
+
doc: ParsedDomainDoc;
|
|
12
|
+
}
|
|
13
|
+
/** Options for {@link putDomainDoc} (ADR-0027 amendment — chain-anchored PUT). */
|
|
14
|
+
export interface PutDomainDocOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Anchor Subaccord address (`?subaccord=`): the daemon resolves it
|
|
17
|
+
* on-chain and requires its `domain_ref` to equal the doc hash
|
|
18
|
+
* (create-first — publish only after the create-tx confirms).
|
|
19
|
+
*/
|
|
20
|
+
subaccord: string;
|
|
21
|
+
/** Content-Type for the PUT; defaults to `text/markdown`. */
|
|
22
|
+
contentType?: string;
|
|
23
|
+
}
|
|
24
|
+
/** Success result of {@link putDomainDoc}: 201 created / 200 idempotent no-op. */
|
|
25
|
+
export interface PutDomainDocResult {
|
|
26
|
+
status: 200 | 201;
|
|
27
|
+
/** The doc's canonical 64-hex sha256 — the on-chain `domain_ref` value. */
|
|
28
|
+
hash: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Typed failure of {@link putDomainDoc}: the daemon rejected the publish.
|
|
32
|
+
* `status` mirrors the daemon's HTTP status (400 hash/anchor mismatch /
|
|
33
|
+
* missing param, 404 anchor not found, 409 collision alarm, 413 over cap,
|
|
34
|
+
* 5xx transport); `body` carries the raw response body for the message.
|
|
35
|
+
*/
|
|
36
|
+
export declare class DomainPublishError extends Error {
|
|
37
|
+
readonly status: number;
|
|
38
|
+
readonly body: string;
|
|
39
|
+
constructor(status: number, body: string);
|
|
40
|
+
}
|
|
41
|
+
/** `sha256(bytes)` as lowercase 64-hex — the canonical `domain_ref` string form. */
|
|
42
|
+
export declare function hashDomainDoc(bytes: Uint8Array): string;
|
|
43
|
+
/**
|
|
44
|
+
* Verify raw doc bytes against an on-chain `domain_ref` — either the 32 raw
|
|
45
|
+
* bytes or its 64-hex string form. False on any mismatch or wrong ref shape.
|
|
46
|
+
*/
|
|
47
|
+
export declare function verifyDomainDoc(bytes: Uint8Array, domainRef: Uint8Array | string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Parse a domain doc: optional `---`-delimited frontmatter with `title` /
|
|
50
|
+
* `description` (single-line `key: value`, surrounding quotes stripped),
|
|
51
|
+
* everything after the closing delimiter is `body`. Absent or unterminated
|
|
52
|
+
* frontmatter ⇒ the whole text is `body`. Unknown keys (including any
|
|
53
|
+
* `version`) are ignored.
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseDomainDoc(bytes: Uint8Array): ParsedDomainDoc;
|
|
56
|
+
/**
|
|
57
|
+
* Fetch a domain doc from the evidence daemon (`GET {daemonUrl}/domains/{hash}`),
|
|
58
|
+
* verify `sha256(bytes) === hash`, and parse it. Throws on non-200 responses
|
|
59
|
+
* and on verification failure (tampered or mismatched bytes).
|
|
60
|
+
*/
|
|
61
|
+
export declare function fetchDomainDoc(daemonUrl: string, hash: string): Promise<FetchedDomainDoc>;
|
|
62
|
+
/**
|
|
63
|
+
* Publish a domain doc to the evidence daemon's public CAS
|
|
64
|
+
* (`PUT {daemonUrl}/domains/{sha256(bytes)}?subaccord=<addr>`) — the single
|
|
65
|
+
* publish implementation; the CLI and both dApps consume this (ADR-0027
|
|
66
|
+
* amendment, bean accord-uecf). Create-first: call only after the create-tx
|
|
67
|
+
* with `domain_ref = hash` has confirmed — the daemon anchor-verifies.
|
|
68
|
+
* Resolves `{ status, hash }` on 201 (created) / 200 (identical bytes already
|
|
69
|
+
* stored — idempotent no-op); throws {@link DomainPublishError} on any other
|
|
70
|
+
* status, carrying `status` + raw body.
|
|
71
|
+
*/
|
|
72
|
+
export declare function putDomainDoc(daemonUrl: string, bytes: Uint8Array, options: PutDomainDocOptions): Promise<PutDomainDocResult>;
|
|
73
|
+
//# sourceMappingURL=domain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAoBA,wEAAwE;AACxE,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+EAA+E;AAC/E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,eAAe,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,kFAAkF;AAClF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAClB,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAMzC;AAKD,oFAAoF;AACpF,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,UAAU,GAAG,MAAM,GAC7B,OAAO,CAST;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAMjE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAgB7B"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed mapping of AccordError codes.
|
|
3
|
+
*
|
|
4
|
+
* Anchor assigns sequential codes starting at 6000 (the `ERROR_CODE_OFFSET`).
|
|
5
|
+
* The order matches the `#[error_code]` enum declaration in
|
|
6
|
+
* `programs/accord/src/errors.rs`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const ACCORD_ERROR_CODE_OFFSET = 6000;
|
|
9
|
+
export type AccordErrorCode = {
|
|
10
|
+
readonly code: number;
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly message: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const AccordErrors: {
|
|
15
|
+
readonly Unauthorized: AccordErrorCode;
|
|
16
|
+
readonly ImmutableSubaccord: AccordErrorCode;
|
|
17
|
+
readonly TimelockNotElapsed: AccordErrorCode;
|
|
18
|
+
readonly NoPendingUpdate: AccordErrorCode;
|
|
19
|
+
readonly NotPauseAuthority: AccordErrorCode;
|
|
20
|
+
readonly AlreadyPaused: AccordErrorCode;
|
|
21
|
+
readonly NotPaused: AccordErrorCode;
|
|
22
|
+
readonly NoPendingUnpause: AccordErrorCode;
|
|
23
|
+
readonly UnpauseTimelockNotElapsed: AccordErrorCode;
|
|
24
|
+
readonly ProgramPaused: AccordErrorCode;
|
|
25
|
+
readonly InsufficientStake: AccordErrorCode;
|
|
26
|
+
readonly StakeLocked: AccordErrorCode;
|
|
27
|
+
readonly InvalidAmount: AccordErrorCode;
|
|
28
|
+
readonly InsufficientBalance: AccordErrorCode;
|
|
29
|
+
readonly InsufficientJurors: AccordErrorCode;
|
|
30
|
+
readonly InvalidOptions: AccordErrorCode;
|
|
31
|
+
readonly InvalidState: AccordErrorCode;
|
|
32
|
+
readonly FeeMismatch: AccordErrorCode;
|
|
33
|
+
readonly InvalidMerklePath: AccordErrorCode;
|
|
34
|
+
readonly TreeFull: AccordErrorCode;
|
|
35
|
+
readonly DuplicateJuror: AccordErrorCode;
|
|
36
|
+
readonly InvalidMembershipProof: AccordErrorCode;
|
|
37
|
+
readonly InvalidPanelSize: AccordErrorCode;
|
|
38
|
+
readonly InflatedStake: AccordErrorCode;
|
|
39
|
+
readonly SortitionMismatch: AccordErrorCode;
|
|
40
|
+
readonly VrfAlreadyCommitted: AccordErrorCode;
|
|
41
|
+
readonly VrfNotCommitted: AccordErrorCode;
|
|
42
|
+
readonly CommitAlreadyExists: AccordErrorCode;
|
|
43
|
+
readonly CommitMissing: AccordErrorCode;
|
|
44
|
+
readonly RevealMismatch: AccordErrorCode;
|
|
45
|
+
readonly CommitWindowClosed: AccordErrorCode;
|
|
46
|
+
readonly RevealWindowClosed: AccordErrorCode;
|
|
47
|
+
readonly NotDrawnJuror: AccordErrorCode;
|
|
48
|
+
readonly InvalidVote: AccordErrorCode;
|
|
49
|
+
readonly AlreadyRevealed: AccordErrorCode;
|
|
50
|
+
readonly AppealWindowOpen: AccordErrorCode;
|
|
51
|
+
readonly MaxAppealsReached: AccordErrorCode;
|
|
52
|
+
readonly MaxAppealsLimitExceeded: AccordErrorCode;
|
|
53
|
+
readonly AppealWindowClosed: AccordErrorCode;
|
|
54
|
+
readonly RoundNotFinalizable: AccordErrorCode;
|
|
55
|
+
readonly DisputeNotFinal: AccordErrorCode;
|
|
56
|
+
readonly ArithmeticOverflow: AccordErrorCode;
|
|
57
|
+
readonly RoundAlreadySettled: AccordErrorCode;
|
|
58
|
+
readonly RoundNotSettlable: AccordErrorCode;
|
|
59
|
+
readonly DisputeFailed: AccordErrorCode;
|
|
60
|
+
readonly CancelTooEarly: AccordErrorCode;
|
|
61
|
+
readonly MaxRetriesExceeded: AccordErrorCode;
|
|
62
|
+
};
|
|
63
|
+
export type AccordErrorName = keyof typeof AccordErrors;
|
|
64
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAQF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Pf,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,YAAY,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** SHA-256 digest (32 bytes). */
|
|
2
|
+
export declare function sha256(data: Uint8Array): Promise<Uint8Array>;
|
|
3
|
+
/**
|
|
4
|
+
* HKDF-SHA256 with an empty salt (per SPEC §Crypto model) and a protocol `info`
|
|
5
|
+
* label that pins the derived key to its role (ingest vs deliver).
|
|
6
|
+
*/
|
|
7
|
+
export declare function hkdfSha256(ikm: Uint8Array, info: Uint8Array, length?: number): Promise<Uint8Array>;
|
|
8
|
+
/** AES-256-GCM encrypt → `nonce(12) ‖ ciphertext ‖ tag(16)` (SPEC wire format). */
|
|
9
|
+
export declare function aesGcmEncrypt(key: Uint8Array, plaintext: Uint8Array): Promise<Uint8Array>;
|
|
10
|
+
/** AES-256-GCM decrypt of a `nonce(12) ‖ ciphertext ‖ tag(16)` blob. Throws on auth failure. */
|
|
11
|
+
export declare function aesGcmDecrypt(key: Uint8Array, blob: Uint8Array): Promise<Uint8Array>;
|
|
12
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/evidence/crypto.ts"],"names":[],"mappings":"AAyBA,iCAAiC;AACjC,wBAAsB,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAElE;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,UAAU,EAChB,MAAM,SAAK,GACV,OAAO,CAAC,UAAU,CAAC,CAErB;AAED,mFAAmF;AACnF,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED,gGAAgG;AAChG,wBAAsB,aAAa,CACjC,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,UAAU,CAAC,CAQrB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** HKDF `info` labels pin the derivation to its protocol role. */
|
|
2
|
+
export declare const INGEST_INFO = "accord-ingest-v1";
|
|
3
|
+
export declare const DELIVER_INFO = "accord-deliver-v1";
|
|
4
|
+
/** Stored ciphertext bundle (ciphertext only — no plaintext field). */
|
|
5
|
+
export interface IngestBundle {
|
|
6
|
+
/** AES-GCM(dek, plaintext) — nonce(12) prepended. */
|
|
7
|
+
ct: Uint8Array;
|
|
8
|
+
/** Claimant's ephemeral X25519 public key (32 bytes). */
|
|
9
|
+
claimant_ephem_pub: Uint8Array;
|
|
10
|
+
/** AES-GCM(k_in, dek) — nonce(12) prepended. */
|
|
11
|
+
wrapped: Uint8Array;
|
|
12
|
+
/** sha256(plaintext); matches the dispute's on-chain `evidence_hash`. */
|
|
13
|
+
plaintext_hash: Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
/** A bundle re-encrypted to a single drawn juror. */
|
|
16
|
+
export interface JurorBundle {
|
|
17
|
+
/** AES-GCM(k_out, plaintext) — nonce(12) prepended. */
|
|
18
|
+
out: Uint8Array;
|
|
19
|
+
/** Operator's ephemeral X25519 public key for this delivery (32 bytes). */
|
|
20
|
+
operator_ephem_pub: Uint8Array;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Claimant-side ingest encryption. Produces the bundle posted to the operator.
|
|
24
|
+
* Claimants run this off-daemon; the operator never calls it in production (it
|
|
25
|
+
* is exposed so claimant SDK clients share one implementation, and for
|
|
26
|
+
* round-trips / test vectors).
|
|
27
|
+
*/
|
|
28
|
+
export declare function claimantEncrypt(plaintext: Uint8Array, operatorEd25519Pub: Uint8Array): Promise<IngestBundle>;
|
|
29
|
+
/**
|
|
30
|
+
* Operator-side decrypt of a stored bundle → plaintext (in-memory only).
|
|
31
|
+
* Callers MUST run {@link verifyIntegrity} next.
|
|
32
|
+
*/
|
|
33
|
+
export declare function operatorDecrypt(bundle: IngestBundle, operatorEd25519SecretSeed: Uint8Array): Promise<Uint8Array>;
|
|
34
|
+
/** Operator re-encrypts plaintext to a drawn juror's Ed25519 pubkey. */
|
|
35
|
+
export declare function deliverToJuror(plaintext: Uint8Array, jurorEd25519Pub: Uint8Array): Promise<JurorBundle>;
|
|
36
|
+
/** Juror-side decrypt of a delivered bundle → plaintext. */
|
|
37
|
+
export declare function jurorDecrypt(delivered: JurorBundle, jurorEd25519SecretSeed: Uint8Array): Promise<Uint8Array>;
|
|
38
|
+
/**
|
|
39
|
+
* Mandatory integrity gate (SPEC §3, §Failure modes): `sha256(plaintext)` MUST
|
|
40
|
+
* equal the dispute's on-chain `evidence_hash`. Both operands are public hashes,
|
|
41
|
+
* so a plain compare suffices (no constant-time requirement). Throws on mismatch
|
|
42
|
+
* — at ingest this rejects a bad upload, at delivery it refuses + alerts.
|
|
43
|
+
*/
|
|
44
|
+
export declare function verifyIntegrity(plaintext: Uint8Array, evidenceHash: Uint8Array): Promise<void>;
|
|
45
|
+
//# sourceMappingURL=ecies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecies.d.ts","sourceRoot":"","sources":["../../src/evidence/ecies.ts"],"names":[],"mappings":"AAgCA,kEAAkE;AAClE,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,YAAY,sBAAsB,CAAC;AAIhD,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,EAAE,EAAE,UAAU,CAAC;IACf,yDAAyD;IACzD,kBAAkB,EAAE,UAAU,CAAC;IAC/B,gDAAgD;IAChD,OAAO,EAAE,UAAU,CAAC;IACpB,yEAAyE;IACzE,cAAc,EAAE,UAAU,CAAC;CAC5B;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,GAAG,EAAE,UAAU,CAAC;IAChB,2EAA2E;IAC3E,kBAAkB,EAAE,UAAU,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,UAAU,EACrB,kBAAkB,EAAE,UAAU,GAC7B,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,yBAAyB,EAAE,UAAU,GACpC,OAAO,CAAC,UAAU,CAAC,CAMrB;AAED,wEAAwE;AACxE,wBAAsB,cAAc,CAClC,SAAS,EAAE,UAAU,EACrB,eAAe,EAAE,UAAU,GAC1B,OAAO,CAAC,WAAW,CAAC,CAOtB;AAED,4DAA4D;AAC5D,wBAAsB,YAAY,CAChC,SAAS,EAAE,WAAW,EACtB,sBAAsB,EAAE,UAAU,GACjC,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,UAAU,EACrB,YAAY,EAAE,UAAU,GACvB,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evidence/fetch.ts — framework-agnostic manifest fetch from the evidence daemon.
|
|
3
|
+
*
|
|
4
|
+
* GET {endpoint}/evidence/{subaccord}/{dispute}/{round}
|
|
5
|
+
*
|
|
6
|
+
* Returns the decrypted manifest (a YAML string for the `accord-evidence/v1`
|
|
7
|
+
* format, or a parsed JSON object if the plaintext was JSON). `null` when no
|
|
8
|
+
* bundle is stored for the round (404).
|
|
9
|
+
*
|
|
10
|
+
* This is the pure fetch — React apps wrap it in a `useQuery` hook
|
|
11
|
+
* (see apps/app and apps/canon `useManifest.ts`).
|
|
12
|
+
*/
|
|
13
|
+
export interface FetchManifestParams {
|
|
14
|
+
endpoint: string;
|
|
15
|
+
subaccord: string;
|
|
16
|
+
dispute: string;
|
|
17
|
+
round: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function fetchManifest(params: FetchManifestParams): Promise<unknown>;
|
|
20
|
+
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../src/evidence/fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,OAAO,CAAC,CAQlB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evidence/index.ts — barrel for the `@useaccord/sdk/evidence` sub-path export.
|
|
3
|
+
*
|
|
4
|
+
* The Accord evidence encryption protocol + its Ed25519/X25519 key material,
|
|
5
|
+
* shared byte-exact by claimant, operator (the evidence-daemon), and juror.
|
|
6
|
+
* Also includes the manifest builder/parser/publisher (the `accord-evidence/v1`
|
|
7
|
+
* wire format) extracted from apps/app (ADR-0015).
|
|
8
|
+
*
|
|
9
|
+
* Kept behind a sub-path export so Arbitrables that only do `create_dispute`
|
|
10
|
+
* CPI don't pull the `@noble` crypto stack.
|
|
11
|
+
*
|
|
12
|
+
* The daemon base URL (`EVIDENCE_DAEMON_URL`) is deployment-specific and stays
|
|
13
|
+
* app-side; `publishEvidence` takes `endpoint` as a parameter (ADR-0011).
|
|
14
|
+
*
|
|
15
|
+
* Authority: ADR-0006 (evidence model), ADR-0011 (evidence-daemon),
|
|
16
|
+
* ADR-0015 (evidence crypto → SDK), ADR-0017 (evidence data format),
|
|
17
|
+
* SPEC §Crypto, EVIDENCE-FORMAT.md.
|
|
18
|
+
*/
|
|
19
|
+
export * from "./crypto.js";
|
|
20
|
+
export * from "./keys.js";
|
|
21
|
+
export * from "./ecies.js";
|
|
22
|
+
export * from "./manifest.js";
|
|
23
|
+
export * from "./options.js";
|
|
24
|
+
export * from "./parse.js";
|
|
25
|
+
export * from "./publish.js";
|
|
26
|
+
export * from "./fetch.js";
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/evidence/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|