Skip to main content

Triple Functions

Functions for creating and managing triples (statements) in the MultiVault contract.

multiVaultCreateTriples​

Create one or more triples (subject-predicate-object statements).

Parameters​

ParameterTypeDescriptionRequired
configWriteConfigContract address, publicClient, walletClientYes
args[bytes32[], bytes32[], bytes32[], bigint[]]Subject IDs, predicate IDs, object IDs, deposit amountsYes
valuebigintTotal ETH to sendYes

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))

multiVaultGetTriple​

Query triple details by ID.

Parameters​

ParameterTypeDescriptionRequired
configReadConfigContract address and publicClientYes
args[bytes32]Triple IDYes

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​

ParameterTypeDescriptionRequired
configReadConfigContract address and publicClientYes
args[bytes32]Vault ID to checkYes

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​

ParameterTypeDescriptionRequired
configReadConfigContract address and publicClientYes
args[bytes32, bytes32]Two triple IDs to compareYes

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​

ParameterTypeDescriptionRequired
configReadConfigContract address and publicClientYes
args[bytes32]Triple IDYes

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​

ParameterTypeDescriptionRequired
subjectsbytes32[]Subject atom IDsYes
predicatesbytes32[]Predicate atom IDsYes
objectsbytes32[]Object atom IDsYes
depositsbigint[]Deposit amountsYes

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)

See Also​