@qubic.org/contracts 0.2.7 → 1.0.1
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/LICENSE +41 -0
- package/README.md +15 -18
- package/dist/__generated__/computorcontrolledfund.d.ts +1 -1
- package/dist/__generated__/computorcontrolledfund.d.ts.map +1 -1
- package/dist/__generated__/computorcontrolledfund.js +8 -8
- package/dist/__generated__/computorcontrolledfund.js.map +1 -1
- package/dist/__generated__/escrow.d.ts +1 -1
- package/dist/__generated__/escrow.d.ts.map +1 -1
- package/dist/__generated__/escrow.js +3 -3
- package/dist/__generated__/escrow.js.map +1 -1
- package/dist/__generated__/generalquorumproposal.d.ts +1 -1
- package/dist/__generated__/generalquorumproposal.d.ts.map +1 -1
- package/dist/__generated__/generalquorumproposal.js +6 -6
- package/dist/__generated__/generalquorumproposal.js.map +1 -1
- package/dist/__generated__/ggwp.d.ts +265 -0
- package/dist/__generated__/ggwp.d.ts.map +1 -0
- package/dist/__generated__/ggwp.js +825 -0
- package/dist/__generated__/ggwp.js.map +1 -0
- package/dist/__generated__/index.d.ts +1 -0
- package/dist/__generated__/index.d.ts.map +1 -1
- package/dist/__generated__/index.js +1 -0
- package/dist/__generated__/index.js.map +1 -1
- package/dist/__generated__/msvault.d.ts +1 -1
- package/dist/__generated__/msvault.d.ts.map +1 -1
- package/dist/__generated__/msvault.js +19 -19
- package/dist/__generated__/msvault.js.map +1 -1
- package/dist/__generated__/multisignvault.d.ts +25 -25
- package/dist/__generated__/multisignvault.d.ts.map +1 -1
- package/dist/__generated__/multisignvault.js +25 -25
- package/dist/__generated__/multisignvault.js.map +1 -1
- package/dist/__generated__/nostromo.d.ts +1 -1
- package/dist/__generated__/nostromo.d.ts.map +1 -1
- package/dist/__generated__/nostromo.js +15 -15
- package/dist/__generated__/nostromo.js.map +1 -1
- package/dist/__generated__/pulse.d.ts +1 -1
- package/dist/__generated__/pulse.d.ts.map +1 -1
- package/dist/__generated__/pulse.js +26 -26
- package/dist/__generated__/pulse.js.map +1 -1
- package/dist/__generated__/qbay.d.ts +1 -1
- package/dist/__generated__/qbay.d.ts.map +1 -1
- package/dist/__generated__/qbay.js +23 -23
- package/dist/__generated__/qbay.js.map +1 -1
- package/dist/__generated__/qbond.d.ts +1 -1
- package/dist/__generated__/qbond.d.ts.map +1 -1
- package/dist/__generated__/qbond.js +14 -14
- package/dist/__generated__/qbond.js.map +1 -1
- package/dist/__generated__/qdraw.d.ts +1 -1
- package/dist/__generated__/qdraw.d.ts.map +1 -1
- package/dist/__generated__/qdraw.js.map +1 -1
- package/dist/__generated__/qduel.d.ts +1 -1
- package/dist/__generated__/qduel.d.ts.map +1 -1
- package/dist/__generated__/qduel.js +11 -11
- package/dist/__generated__/qduel.js.map +1 -1
- package/dist/__generated__/qearn.d.ts +1 -1
- package/dist/__generated__/qearn.d.ts.map +1 -1
- package/dist/__generated__/qearn.js +10 -10
- package/dist/__generated__/qearn.js.map +1 -1
- package/dist/__generated__/qip.d.ts +18 -1
- package/dist/__generated__/qip.d.ts.map +1 -1
- package/dist/__generated__/qip.js +64 -3
- package/dist/__generated__/qip.js.map +1 -1
- package/dist/__generated__/qraffle.d.ts +1 -1
- package/dist/__generated__/qraffle.d.ts.map +1 -1
- package/dist/__generated__/qraffle.js +12 -12
- package/dist/__generated__/qraffle.js.map +1 -1
- package/dist/__generated__/qreservepool.d.ts +1 -1
- package/dist/__generated__/qreservepool.d.ts.map +1 -1
- package/dist/__generated__/qreservepool.js +5 -5
- package/dist/__generated__/qreservepool.js.map +1 -1
- package/dist/__generated__/qrwa.d.ts +1 -1
- package/dist/__generated__/qrwa.d.ts.map +1 -1
- package/dist/__generated__/qrwa.js +18 -18
- package/dist/__generated__/qrwa.js.map +1 -1
- package/dist/__generated__/qswap.d.ts +3 -1
- package/dist/__generated__/qswap.d.ts.map +1 -1
- package/dist/__generated__/qswap.js +30 -18
- package/dist/__generated__/qswap.js.map +1 -1
- package/dist/__generated__/qthirtyfour.d.ts +1 -1
- package/dist/__generated__/qthirtyfour.d.ts.map +1 -1
- package/dist/__generated__/qthirtyfour.js +19 -19
- package/dist/__generated__/qthirtyfour.js.map +1 -1
- package/dist/__generated__/qubicicoportal.d.ts +4 -4
- package/dist/__generated__/qubicicoportal.d.ts.map +1 -1
- package/dist/__generated__/qubicicoportal.js +4 -4
- package/dist/__generated__/qubicicoportal.js.map +1 -1
- package/dist/__generated__/quottery.d.ts +1 -1
- package/dist/__generated__/quottery.d.ts.map +1 -1
- package/dist/__generated__/quottery.js +14 -14
- package/dist/__generated__/quottery.js.map +1 -1
- package/dist/__generated__/qusino.d.ts +1 -1
- package/dist/__generated__/qusino.d.ts.map +1 -1
- package/dist/__generated__/qusino.js +13 -13
- package/dist/__generated__/qusino.js.map +1 -1
- package/dist/__generated__/qutil.d.ts +1 -1
- package/dist/__generated__/qutil.d.ts.map +1 -1
- package/dist/__generated__/qutil.js +22 -22
- package/dist/__generated__/qutil.js.map +1 -1
- package/dist/__generated__/qvault.d.ts +14 -2
- package/dist/__generated__/qvault.d.ts.map +1 -1
- package/dist/__generated__/qvault.js +70 -32
- package/dist/__generated__/qvault.js.map +1 -1
- package/dist/__generated__/qx.d.ts +1 -1
- package/dist/__generated__/qx.d.ts.map +1 -1
- package/dist/__generated__/qx.js +12 -12
- package/dist/__generated__/qx.js.map +1 -1
- package/dist/__generated__/random.d.ts +24 -1
- package/dist/__generated__/random.d.ts.map +1 -1
- package/dist/__generated__/random.js +68 -0
- package/dist/__generated__/random.js.map +1 -1
- package/dist/__generated__/randomlottery.d.ts +1 -1
- package/dist/__generated__/randomlottery.d.ts.map +1 -1
- package/dist/__generated__/randomlottery.js +12 -12
- package/dist/__generated__/randomlottery.js.map +1 -1
- package/dist/__generated__/vottunbridge.d.ts +1 -1
- package/dist/__generated__/vottunbridge.d.ts.map +1 -1
- package/dist/__generated__/vottunbridge.js +13 -13
- package/dist/__generated__/vottunbridge.js.map +1 -1
- package/dist/call-contract.d.ts.map +1 -1
- package/dist/call-contract.js +6 -1
- package/dist/call-contract.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
- package/src/__generated__/computorcontrolledfund.ts +1066 -0
- package/src/__generated__/escrow.ts +529 -0
- package/src/__generated__/generalquorumproposal.ts +691 -0
- package/src/__generated__/ggwp.ts +1241 -0
- package/src/__generated__/index.ts +28 -0
- package/src/__generated__/msvault.ts +1716 -0
- package/src/__generated__/multisignvault.ts +1511 -0
- package/src/__generated__/mylastmatch.ts +12 -0
- package/src/__generated__/nostromo.ts +1551 -0
- package/src/__generated__/pulse.ts +1512 -0
- package/src/__generated__/qbay.ts +2097 -0
- package/src/__generated__/qbond.ts +1016 -0
- package/src/__generated__/qdraw.ts +188 -0
- package/src/__generated__/qduel.ts +827 -0
- package/src/__generated__/qearn.ts +696 -0
- package/src/__generated__/qip.ts +501 -0
- package/src/__generated__/qraffle.ts +1162 -0
- package/src/__generated__/qreservepool.ts +281 -0
- package/src/__generated__/qrwa.ts +1491 -0
- package/src/__generated__/qswap.ts +1336 -0
- package/src/__generated__/qthirtyfour.ts +1131 -0
- package/src/__generated__/qubicicoportal.ts +386 -0
- package/src/__generated__/quottery.ts +1519 -0
- package/src/__generated__/qusino.ts +799 -0
- package/src/__generated__/qutil.ts +1506 -0
- package/src/__generated__/qvault.ts +2911 -0
- package/src/__generated__/qx.ts +861 -0
- package/src/__generated__/random.ts +145 -0
- package/src/__generated__/randomlottery.ts +653 -0
- package/src/__generated__/supplywatcher.ts +12 -0
- package/src/__generated__/vottunbridge.ts +1162 -0
- package/src/__tests__/contracts.test.ts +933 -0
- package/src/call-contract.ts +87 -0
- package/src/index.ts +9 -0
- package/dist/result.d.ts +0 -12
- package/dist/result.d.ts.map +0 -1
- package/dist/result.js +0 -7
- package/dist/result.js.map +0 -1
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { BinaryField, FieldValue, NamedStruct } from '@qubic.org/registry'
|
|
2
|
+
import { buildPayload, decodePayload } from '@qubic.org/registry'
|
|
3
|
+
import type { QubicRpcError } from '@qubic.org/rpc'
|
|
4
|
+
import type { QuerySmartContractRequest, QuerySmartContractResponse } from '@qubic.org/rpc'
|
|
5
|
+
import type { Result } from '@qubic.org/rpc'
|
|
6
|
+
import { ok } from '@qubic.org/types'
|
|
7
|
+
|
|
8
|
+
export interface SmartContractCaller {
|
|
9
|
+
querySmartContract(
|
|
10
|
+
req: QuerySmartContractRequest,
|
|
11
|
+
): Promise<Result<QuerySmartContractResponse, QubicRpcError>>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface ContractCallOptions {
|
|
15
|
+
identityToPublicKey?: (identity: string) => Uint8Array
|
|
16
|
+
publicKeyToIdentity?: (pk: Uint8Array) => string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Returned by builder functions — contains everything needed to send a contract call. */
|
|
20
|
+
export interface ContractCall {
|
|
21
|
+
contractIndex: number
|
|
22
|
+
inputType: number
|
|
23
|
+
payload: Uint8Array
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const _defaultIdToPk = (_identity: string): Uint8Array => {
|
|
27
|
+
throw new Error('identityToPublicKey is required for contracts with id-type fields')
|
|
28
|
+
}
|
|
29
|
+
const _defaultPkToId = (_pk: Uint8Array): string => {
|
|
30
|
+
throw new Error('publicKeyToIdentity is required for contracts with id-type fields')
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function toBase64(bytes: Uint8Array): string {
|
|
34
|
+
let s = ''
|
|
35
|
+
for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i] ?? 0)
|
|
36
|
+
return btoa(s)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function fromBase64(b64: string): Uint8Array {
|
|
40
|
+
const s = atob(b64)
|
|
41
|
+
const out = new Uint8Array(s.length)
|
|
42
|
+
for (let i = 0; i < s.length; i++) out[i] = s.charCodeAt(i)
|
|
43
|
+
return out
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface CallContractFunctionOptions<TInput extends Record<string, unknown>> {
|
|
47
|
+
live: SmartContractCaller
|
|
48
|
+
contractIndex: number
|
|
49
|
+
inputType: number
|
|
50
|
+
inputSize: number
|
|
51
|
+
inputFields: BinaryField[]
|
|
52
|
+
outputFields: BinaryField[]
|
|
53
|
+
structs: Record<string, NamedStruct>
|
|
54
|
+
input: TInput
|
|
55
|
+
identityToPublicKey?: (identity: string) => Uint8Array
|
|
56
|
+
publicKeyToIdentity?: (pk: Uint8Array) => string
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function callContractFunction<TInput extends Record<string, unknown>, TOutput>(
|
|
60
|
+
options: CallContractFunctionOptions<TInput>,
|
|
61
|
+
): Promise<Result<TOutput, QubicRpcError>> {
|
|
62
|
+
const idToPk = options.identityToPublicKey ?? _defaultIdToPk
|
|
63
|
+
const pkToId = options.publicKeyToIdentity ?? _defaultPkToId
|
|
64
|
+
// buildPayload / decodePayload throw PayloadBuildError on bad input — those are
|
|
65
|
+
// programmer errors and must not be swallowed as QubicRpcError.
|
|
66
|
+
const payload = buildPayload(
|
|
67
|
+
options.inputFields,
|
|
68
|
+
options.structs,
|
|
69
|
+
options.input as Record<string, FieldValue | Uint8Array>,
|
|
70
|
+
idToPk,
|
|
71
|
+
)
|
|
72
|
+
const r = await options.live.querySmartContract({
|
|
73
|
+
contractIndex: options.contractIndex,
|
|
74
|
+
inputType: options.inputType,
|
|
75
|
+
inputSize: options.inputSize,
|
|
76
|
+
requestData: toBase64(payload),
|
|
77
|
+
})
|
|
78
|
+
if (!r.ok) return r
|
|
79
|
+
const responseBytes = fromBase64(r.value.responseData ?? '')
|
|
80
|
+
const decoded = decodePayload(responseBytes, options.outputFields, options.structs, pkToId)
|
|
81
|
+
for (const field of options.outputFields) {
|
|
82
|
+
if (!(field.name in decoded)) {
|
|
83
|
+
throw new Error(`decoded response missing expected field "${field.name}"`)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return ok(decoded as unknown as TOutput)
|
|
87
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type { Result, Ok, Err } from '@qubic.org/types'
|
|
2
|
+
export { ok, err } from '@qubic.org/types'
|
|
3
|
+
export type {
|
|
4
|
+
SmartContractCaller,
|
|
5
|
+
CallContractFunctionOptions,
|
|
6
|
+
ContractCall,
|
|
7
|
+
} from './call-contract.js'
|
|
8
|
+
export { callContractFunction } from './call-contract.js'
|
|
9
|
+
export * from './__generated__/index.js'
|
package/dist/result.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export type Ok<T> = {
|
|
2
|
-
readonly ok: true;
|
|
3
|
-
readonly value: T;
|
|
4
|
-
};
|
|
5
|
-
export type Err<E> = {
|
|
6
|
-
readonly ok: false;
|
|
7
|
-
readonly error: E;
|
|
8
|
-
};
|
|
9
|
-
export type Result<T, E> = Ok<T> | Err<E>;
|
|
10
|
-
export declare function ok<T>(value: T): Ok<T>;
|
|
11
|
-
export declare function err<E>(error: E): Err<E>;
|
|
12
|
-
//# sourceMappingURL=result.d.ts.map
|
package/dist/result.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,EAAE,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAA;AAC5D,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAA;AAC9D,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AACzC,wBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAErC;AACD,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAEvC"}
|
package/dist/result.js
DELETED
package/dist/result.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,EAAE,CAAI,KAAQ;IAC5B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;AAC5B,CAAC;AACD,MAAM,UAAU,GAAG,CAAI,KAAQ;IAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;AAC7B,CAAC"}
|