Triple Functions
Functions for creating and managing triples (statements) in the MultiVault contract.
multiVaultCreateTriplesβ
Create one or more triples (subject-predicate-object statements).
Parametersβ
| Parameter | Type | Description | Required |
|---|---|---|---|
| config | WriteConfig | Contract address, publicClient, walletClient | Yes |
| args | [bytes32[], bytes32[], bytes32[], bigint[]] | Subject IDs, predicate IDs, object IDs, deposit amounts | Yes |
| value | bigint | Total ETH to send | Yes |
Returnsβ
Promise<Hash> // Transaction hash
Basic Exampleβ
import { multiVaultCreateTriples, multiVaultGetTripleCost } from '@0xintuition/protocol'
const tripleCost = await multiVaultGetTripleCost({ address, publicClient })
const txHash = await multiVaultCreateTriples(
{ address, walletClient, publicClient },
{
args: [
[subjectId],
[predicateId],
[objectId],
[tripleCost],
],
value: tripleCost,
}
)
Advanced Exampleβ
import { parseEther } from 'viem'
import { eventParseTripleCreated } from '@0xintuition/protocol'
const tripleCost = await multiVaultGetTripleCost({ address, publicClient })
// Create multiple triples
const subjects = [aliceId, bobId, charlieId]
const predicates = [followsId, followsId, followsId]
const objects = [bobId, charlieId, aliceId]
const deposits = subjects.map(() => tripleCost + parseEther('0.1'))
const totalValue = deposits.reduce((a, b) => a + b, 0n)
const txHash = await multiVaultCreateTriples(
{ address, walletClient, publicClient },
{
args: [subjects, predicates, objects, deposits],
value: totalValue,
}
)
const events = await eventParseTripleCreated(publicClient, txHash)
console.log('Created triple IDs:', events.map(e => e.args.tripleId))
Related Functionsβ
- multiVaultGetTriple - Query triple details
- multiVaultGetTripleCost - Get creation cost
multiVaultGetTripleβ
Query triple details by ID.
Parametersβ
| Parameter | Type | Description | Required |
|---|---|---|---|
| config | ReadConfig | Contract address and publicClient | Yes |
| args | [bytes32] | Triple ID | Yes |
Returnsβ
Promise<[bigint, bigint, bigint, bigint, bigint, bigint]>
// [id, subjectId, predicateId, objectId, counterVaultId, creatorAtomId]
Exampleβ
const triple = await multiVaultGetTriple({ address, publicClient }, { args: [tripleId] })
console.log('Triple ID:', triple[0])
console.log('Subject:', triple[1])
console.log('Predicate:', triple[2])
console.log('Object:', triple[3])
console.log('Counter vault:', triple[4])
console.log('Creator:', triple[5])
multiVaultGetTripleCostβ
Get the base cost to create a triple.
Returnsβ
Promise<bigint> // Triple creation cost in wei
Exampleβ
import { formatEther } from 'viem'
const cost = await multiVaultGetTripleCost({ address, publicClient })
console.log('Triple cost:', formatEther(cost), 'ETH')
multiVaultIsTripleβ
Check if a vault ID represents a triple.
Parametersβ
| Parameter | Type | Description | Required |
|---|---|---|---|
| config | ReadConfig | Contract address and publicClient | Yes |
| args | [bytes32] | Vault ID to check | Yes |
Returnsβ
Promise<boolean>
Exampleβ
const isTriple = await multiVaultIsTriple({ address, publicClient }, { args: [vaultId] })
if (isTriple) {
console.log('This is a triple vault')
} else {
console.log('This is an atom vault')
}
multiVaultIsCounterTripleβ
Check if two triples are counter-triples (opposing positions).
Parametersβ
| Parameter | Type | Description | Required |
|---|---|---|---|
| config | ReadConfig | Contract address and publicClient | Yes |
| args | [bytes32, bytes32] | Two triple IDs to compare | Yes |
Returnsβ
Promise<boolean>
Exampleβ
const isCounter = await multiVaultIsCounterTriple(
{ address, publicClient },
{ args: [tripleId1, tripleId2] }
)
if (isCounter) {
console.log('These triples represent opposing positions')
}
multiVaultGetInverseTripleIdβ
Get the counter-triple ID for a given triple.
Parametersβ
| Parameter | Type | Description | Required |
|---|---|---|---|
| config | ReadConfig | Contract address and publicClient | Yes |
| args | [bytes32] | Triple ID | Yes |
Returnsβ
Promise<bigint> // Counter-triple vault ID
Exampleβ
const inverseId = await multiVaultGetInverseTripleId(
{ address, publicClient },
{ args: [tripleId] }
)
// Deposit to counter-triple (stake against)
const txHash = await multiVaultDeposit(
{ address, walletClient, publicClient },
{
args: [account.address, inverseId, curveId, minShares],
value: depositAmount,
}
)
multiVaultCreateTriplesEncodeβ
Encode triple creation call data.
Parametersβ
| Parameter | Type | Description | Required |
|---|---|---|---|
| subjects | bytes32[] | Subject atom IDs | Yes |
| predicates | bytes32[] | Predicate atom IDs | Yes |
| objects | bytes32[] | Object atom IDs | Yes |
| deposits | bigint[] | Deposit amounts | Yes |
Returnsβ
Hex // Encoded function call data
Exampleβ
const data = multiVaultCreateTriplesEncode(
[subjectId],
[predicateId],
[objectId],
[tripleCost]
)
const tx = {
to: address,
data,
value: tripleCost,
}
const hash = await walletClient.sendTransaction(tx)