Skip to main content
For the complete documentation index, see llms.txt

Ledger data types

Compact 언어 버전 0.23.0, 컴파일러 버전 0.31.0.

Kernel

다양한 내장 연산을 정의하는 특수 ADT로, 최상위 ADT 타입으로만 사용할 수 있습니다.

balance

balance(token_type: Either<Bytes<32>, Bytes<32>>): Uint<128>

현재 컨트랙트에서 지정된 토큰 타입의 비차폐 토큰 잔액을 반환합니다. 이 잔액은 컨트랙트 실행 중 비차폐 송수신에 의해 업데이트되지 않으며, 항상 실행 시작 시점의 값으로 고정됩니다.

balanceGreaterThan

balanceGreaterThan(token_type: Either<Bytes<32>, Bytes<32>>, amount: Uint<128>): Boolean

지정된 타입의 비차폐 토큰 잔액이 지정된 금액보다 큰지 확인합니다.

balanceLessThan

balanceLessThan(token_type: Either<Bytes<32>, Bytes<32>>, amount: Uint<128>): Boolean

지정된 타입의 비차폐 토큰 잔액이 지정된 금액보다 작은지 확인합니다.

blockTimeGreaterThan

blockTimeGreaterThan(time: Uint<64>): Boolean

현재 블록 시간(Unix epoch 이후 초 단위)이 지정된 값보다 큰지 확인합니다.

blockTimeLessThan

blockTimeLessThan(time: Uint<64>): Boolean

현재 블록 시간(Unix epoch 이후 초 단위)이 지정된 값보다 작은지 확인합니다.

checkpoint

checkpoint(): []

이 시점까지의 실행을 하나의 원자적 단위로 묶어, 트랜잭션이 부분 실패할 경우 이 지점을 기준으로 분리할 수 있게 합니다.

claimContractCall

claimContractCall(addr: Bytes<32>, entry_point: Bytes<32>, comm: Field): []

해당 트랜잭션 내에 동일한 주소, 진입점 해시, 통신 커밋먼트를 가진 다른 컨트랙트 호출이 존재해야 하며, 아직 다른 호출에 의해 청구되지 않은 상태여야 합니다.

claimUnshieldedCoinSpend

claimUnshieldedCoinSpend(token_type: Either<Bytes<32>, Bytes<32>>, address: Either<ContractAddress, UserAddress>, amount: Uint<128>): []

비차폐 코인 지출을 청구합니다. 지정된 토큰 타입의 비차폐 코인을 지정된 주소로 전송하도록 승인합니다.

claimZswapCoinReceive

claimZswapCoinReceive(note: Bytes<32>): []

해당 트랜잭션 내에 커밋먼트가 존재해야 하며, 다른 호출이 이를 수신으로 청구하지 않은 상태여야 합니다.

claimZswapCoinSpend

claimZswapCoinSpend(note: Bytes<32>): []

해당 트랜잭션 내에 커밋먼트가 존재해야 하며, 다른 호출이 이를 지출로 청구하지 않은 상태여야 합니다.

claimZswapNullifier

claimZswapNullifier(nul: Bytes<32>): []

해당 트랜잭션 내에 nullifier가 존재해야 하며, 다른 호출이 이를 청구하지 않은 상태여야 합니다.

incUnshieldedInputs

incUnshieldedInputs(token_type: Either<Bytes<32>, Bytes<32>>, amount: Uint<128>): []

지정된 토큰 타입의 비차폐 입력을 지정된 금액만큼 증가시킵니다. 토큰 수신 시 사용합니다.

incUnshieldedOutputs

incUnshieldedOutputs(token_type: Either<Bytes<32>, Bytes<32>>, amount: Uint<128>): []

지정된 토큰 타입의 비차폐 출력을 지정된 금액만큼 증가시킵니다. 토큰 전송 시 사용합니다.

mintShielded

mintShielded(domain_sep: Bytes<32>, amount: Uint<64>): []

컨트랙트 주소에서 파생된 토큰 타입과 지정된 도메인 구분자를 사용하여 지정된 양의 차폐 코인을 발행합니다.

mintUnshielded

mintUnshielded(domain_sep: Bytes<32>, amount: Uint<64>): []

컨트랙트 주소에서 파생된 토큰 타입과 지정된 도메인 구분자를 사용하여 지정된 양의 비차폐 코인을 발행합니다.

self

self(): ContractAddress

현재 컨트랙트의 주소를 반환합니다. ContractAddress는 CompactStandardLibrary에 정의되어 있습니다.

Cell<value_type>

이 ADT는 value_type 타입의 값을 포함하는 단일 Cell이며, ledger 필드 타입이 일반 Compact 타입일 때 암시적으로 사용됩니다. 프로그래머는 ledger 필드를 선언할 때 Cell을 명시적으로 작성할 수 없습니다.

read

read(): value_type

이 Cell의 현재 내용을 반환합니다.

TypeScript에서 ledger 필드의 getter로 사용 가능

resetToDefault

resetToDefault(): []

이 Cell을 해당 타입의 기본값으로 재설정합니다.

write

write(value: value_type): []

이 Cell의 내용을 주어진 값으로 덮어씁니다.

writeCoin

writeCoin(coin: ShieldedCoinInfo, recipient: Either<ZswapCoinPublicKey, ContractAddress>): []

ShieldedCoinInfo를 이 Cell에 씁니다. 이 값은 런타임에 관련 Merkle 트리 인덱스를 조회하여 QualifiedShieldedCoinInfo로 변환됩니다. 이 인덱스는 현재 트랜잭션 내에서 할당되어야 하며, 그렇지 않으면 이 쓰기가 실패합니다. ShieldedCoinInfo, ContractAddress, Either, ZswapCoinPublicKey는 CompactStandardLibrary에 정의되어 있습니다.

QualifiedShieldedCoinInfo value_type에서만 사용 가능

Counter

이 ADT는 단순한 카운터입니다.

decrement

decrement(amount: Uint<16>): []

카운터를 주어진 양만큼 감소시킵니다. 0 미만으로 감소시키면 런타임 오류가 발생합니다.

increment

increment(amount: Uint<16>): []

카운터를 주어진 양만큼 증가시킵니다.

lessThan

lessThan(threshold: Uint<64>): Boolean

카운터가 주어진 임계값보다 작은지 반환합니다.

read

read(): Uint<64>

카운터의 현재 값을 가져옵니다.

TypeScript에서 ledger 필드의 getter로 사용 가능

resetToDefault

resetToDefault(): []

이 Counter를 기본값 0으로 재설정합니다.

Set<value_type>

이 ADT는 value_type 타입 값의 무한 집합입니다.

insert

insert(elem: value_type): []

이 Set을 업데이트하여 주어진 요소를 포함시킵니다.

insertCoin

insertCoin(coin: ShieldedCoinInfo, recipient: Either<ZswapCoinPublicKey, ContractAddress>): []

ShieldedCoinInfo를 이 Set에 삽입합니다. 이 값은 런타임에 관련 Merkle 트리 인덱스를 조회하여 QualifiedShieldedCoinInfo로 변환됩니다. 이 인덱스는 현재 트랜잭션 내에서 할당되어야 하며, 그렇지 않으면 이 삽입이 실패합니다. ShieldedCoinInfo, ContractAddress, Either, ZswapCoinPublicKey는 CompactStandardLibrary에 정의되어 있습니다.

QualifiedShieldedCoinInfo value_type에서만 사용 가능

isEmpty

isEmpty(): Boolean

이 Set이 빈 집합인지 반환합니다.

TypeScript에서 isEmpty(): boolean으로 사용 가능

member

member(elem: value_type): Boolean

요소가 이 Set에 포함되어 있는지 반환합니다.

TypeScript에서 member(elem: value_type): boolean으로 사용 가능

remove

remove(elem: value_type): []

이 Set을 업데이트하여 주어진 요소를 제외시킵니다.

resetToDefault

resetToDefault(): []

이 Set을 빈 집합으로 재설정합니다.

size

size(): Uint<64>

이 Set의 고유 항목 수를 반환합니다.

TypeScript에서 size(): bigint로 사용 가능

[Symbol.iterator]

TypeScript에서만 호출 가능

[Symbol.iterator](): Iterator<value_type>

이 Set의 항목을 순회합니다.

Map<key_type, value_type>

이 ADT는 key_type 타입의 값과 value_type 타입의 값 사이의 무한 매핑 집합입니다.

insert

insert(key: key_type, value: value_type): []

이 Map을 업데이트하여 주어진 키에 새 값을 포함시킵니다.

insertCoin

insertCoin(key: key_type, coin: ShieldedCoinInfo, recipient: Either<ZswapCoinPublicKey, ContractAddress>): []

주어진 키에 ShieldedCoinInfo를 이 Map에 삽입합니다. ShieldedCoinInfo는 런타임에 관련 Merkle 트리 인덱스를 조회하여 QualifiedShieldedCoinInfo로 변환됩니다. 이 인덱스는 현재 트랜잭션 내에서 할당되어야 하며, 그렇지 않으면 이 삽입이 실패합니다. ShieldedCoinInfo, ContractAddress, Either, ZswapCoinPublicKey는 CompactStandardLibrary에 정의되어 있습니다.

QualifiedShieldedCoinInfo value_type에서만 사용 가능

insertDefault

insertDefault(key: key_type): []

이 Map을 업데이트하여 주어진 키에 값 타입의 기본값을 포함시킵니다.

isEmpty

isEmpty(): Boolean

이 Map이 빈 맵인지 반환합니다.

TypeScript에서 isEmpty(): boolean으로 사용 가능

lookup

lookup(key: key_type): value_type

이 Map에서 키의 값을 조회합니다. 반환된 값은 다른 ADT일 수 있습니다.

TypeScript에서 lookup(key: key_type): value_type으로 사용 가능

member

member(key: key_type): Boolean

키가 이 Map에 포함되어 있는지 반환합니다.

TypeScript에서 member(key: key_type): boolean으로 사용 가능

remove

remove(key: key_type): []

이 Map을 업데이트하여 주어진 키를 제외시킵니다.

resetToDefault

resetToDefault(): []

이 Map을 빈 맵으로 재설정합니다.

size

size(): Uint<64>

이 Map의 항목 수를 반환합니다.

TypeScript에서 size(): bigint로 사용 가능

[Symbol.iterator]

TypeScript에서만 호출 가능

[Symbol.iterator](): Iterator<[key_type, value_type]>

이 Map에 포함된 키-값 쌍을 순회합니다.

List<value_type>

이 ADT는 value_type 타입 값의 무한 리스트입니다.

head(): Maybe<value_type>

이 List의 첫 번째 요소를 가져오며, Maybe를 반환하여 빈 리스트에서도 이 호출이 성공하도록 보장합니다. Maybe는 CompactStandardLibrary(TypeScript에서는 compact-runtime)에 정의되어 있습니다.

TypeScript에서 head(): Maybe<value_type>으로 사용 가능

isEmpty

isEmpty(): Boolean

이 List가 빈 리스트인지 반환합니다.

TypeScript에서 isEmpty(): boolean으로 사용 가능

length

length(): Uint<64>

이 List에 포함된 요소 수를 반환합니다.

TypeScript에서 length(): bigint로 사용 가능

popFront

popFront(): []

이 리스트의 앞에서 첫 번째 요소를 제거합니다.

pushFront

pushFront(value: value_type): []

이 리스트의 앞에 새 요소를 추가합니다.

pushFrontCoin

pushFrontCoin(coin: ShieldedCoinInfo, recipient: Either<ZswapCoinPublicKey, ContractAddress>): []

ShieldedCoinInfo를 이 List의 앞에 추가합니다. ShieldedCoinInfo는 런타임에 관련 Merkle 트리 인덱스를 조회하여 QualifiedShieldedCoinInfo로 변환됩니다. 이 인덱스는 현재 트랜잭션 내에서 할당되어야 하며, 그렇지 않으면 이 push가 실패합니다. ShieldedCoinInfo, ContractAddress, Either, ZswapCoinPublicKey는 CompactStandardLibrary에 정의되어 있습니다.

QualifiedShieldedCoinInfo value_type에서만 사용 가능

resetToDefault

resetToDefault(): []

이 List를 빈 리스트로 재설정합니다.

[Symbol.iterator]

TypeScript에서만 호출 가능

[Symbol.iterator](): Iterator<value_type>

이 List의 항목을 순회합니다.

MerkleTree<nat, value_type>

이 ADT는 2 <= nat <= 32인 깊이 nat의 바운드된 Merkle 트리로, value_type 타입의 값을 포함합니다.

checkRoot

checkRoot(rt: MerkleTreeDigest): Boolean

주어진 Merkle 트리 루트가 이 Merkle 트리의 루트인지 테스트합니다. MerkleTreeDigest는 CompactStandardLibrary(TypeScript에서는 compact-runtime)에 정의되어 있습니다.

TypeScript에서 checkRoot(rt: MerkleTreeDigest): boolean으로 사용 가능

insert

insert(item: value_type): []

이 Merkle 트리의 첫 번째 빈 인덱스에 새 리프를 삽입합니다.

insertHash

insertHash(hash: Bytes<32>): []

이 Merkle 트리의 첫 번째 빈 인덱스에 주어진 해시를 가진 새 리프를 삽입합니다.

insertHashIndex

insertHashIndex(hash: Bytes<32>, index: Uint<64>): []

이 Merkle 트리의 특정 인덱스에 주어진 해시를 가진 새 리프를 삽입합니다.

insertIndex

insertIndex(item: value_type, index: Uint<64>): []

이 Merkle 트리의 특정 인덱스에 새 리프를 삽입합니다.

insertIndexDefault

insertIndexDefault(index: Uint<64>): []

이 Merkle 트리의 특정 인덱스에 기본값 리프를 삽입합니다. 이는 트리에서의 제거를 에뮬레이션하는 데 사용할 수 있습니다.

isFull

isFull(): Boolean

이 Merkle 트리가 가득 찼으며 더 이상 항목을 직접 삽입할 수 없는지 반환합니다.

TypeScript에서 isFull(): boolean으로 사용 가능

resetToDefault

resetToDefault(): []

이 Merkle 트리를 빈 Merkle 트리로 재설정합니다.

findPathForLeaf

TypeScript에서만 호출 가능

findPathForLeaf(leaf: value_type): MerkleTreePath<value_type> | undefined

Merkle 트리에서 주어진 리프의 경로를 찾습니다. O(n) 연산이므로 큰 트리에서는 사용을 피해야 합니다. 해당 리프가 존재하지 않으면 undefined를 반환합니다. MerkleTreePath는 compact-runtime에 정의되어 있습니다.

firstFree

TypeScript에서만 호출 가능

firstFree(): bigint

Merkle 트리에서 첫 번째 (보장된) 빈 인덱스를 가져옵니다.

pathForLeaf

TypeScript에서만 호출 가능

pathForLeaf(index: bigint, leaf: value_type): MerkleTreePath<value_type>

지정된 리프가 주어진 인덱스에 있다는 것을 알고 있을 때 Merkle 경로를 반환합니다. 이 리프가 주어진 인덱스에 포함되어 있지 않으면 오류가 발생합니다. MerkleTreePath는 compact-runtime에 정의되어 있습니다.

root

TypeScript에서만 호출 가능

root(): MerkleTreeDigest

Merkle 트리의 루트를 가져옵니다. MerkleTreeDigest는 compact-runtime에 정의되어 있습니다.

HistoricMerkleTree<nat, value_type>

이 ADT는 2 <= nat <= 32인 깊이 nat의 바운드된 Merkle 트리로, value_type 타입의 값을 포함하며 히스토리를 가집니다.

checkRoot

checkRoot(rt: MerkleTreeDigest): Boolean

주어진 Merkle 트리 루트가 이 Merkle 트리의 과거 루트 중 하나인지 테스트합니다. MerkleTreeDigest는 CompactStandardLibrary(TypeScript에서는 compact-runtime)에 정의되어 있습니다.

TypeScript에서 checkRoot(rt: MerkleTreeDigest): boolean으로 사용 가능

insert

insert(item: value_type): []

이 Merkle 트리의 첫 번째 빈 인덱스에 새 리프를 삽입합니다.

insertHash

insertHash(hash: Bytes<32>): []

이 Merkle 트리의 첫 번째 빈 인덱스에 주어진 해시를 가진 새 리프를 삽입합니다.

insertHashIndex

insertHashIndex(hash: Bytes<32>, index: Uint<64>): []

이 Merkle 트리의 특정 인덱스에 주어진 해시를 가진 새 리프를 삽입합니다.

insertIndex

insertIndex(item: value_type, index: Uint<64>): []

이 Merkle 트리의 특정 인덱스에 새 리프를 삽입합니다.

insertIndexDefault

insertIndexDefault(index: Uint<64>): []

이 Merkle 트리의 특정 인덱스에 기본값 리프를 삽입합니다. 이는 트리에서의 제거를 에뮬레이션하는 데 사용할 수 있습니다.

isFull

isFull(): Boolean

이 Merkle 트리가 가득 찼으며 더 이상 항목을 직접 삽입할 수 없는지 반환합니다.

TypeScript에서 isFull(): boolean으로 사용 가능

resetHistory

resetHistory(): []

이 Merkle 트리의 히스토리를 재설정하여 현재 루트만 유효하게 만듭니다.

resetToDefault

resetToDefault(): []

이 Merkle 트리를 빈 Merkle 트리로 재설정합니다.

findPathForLeaf

TypeScript에서만 호출 가능

findPathForLeaf(leaf: value_type): MerkleTreePath<value_type> | undefined

Merkle 트리에서 주어진 리프의 경로를 찾습니다. O(n) 연산이므로 큰 트리에서는 사용을 피해야 합니다. 해당 리프가 존재하지 않으면 undefined를 반환합니다. MerkleTreePath는 compact-runtime에 정의되어 있습니다.

firstFree

TypeScript에서만 호출 가능

firstFree(): bigint

Merkle 트리에서 첫 번째 (보장된) 빈 인덱스를 가져옵니다.

history

TypeScript에서만 호출 가능

history(): Iterator<MerkleTreeDigest>

이 Merkle 트리에 대해 유효한 과거 루트로 간주되는 루트들의 이터레이터입니다. MerkleTreeDigest는 compact-runtime에 정의되어 있습니다.

pathForLeaf

TypeScript에서만 호출 가능

pathForLeaf(index: bigint, leaf: value_type): MerkleTreePath<value_type>

지정된 리프가 주어진 인덱스에 있다는 것을 알고 있을 때 Merkle 경로를 반환합니다. 인덱스가 범위를 벗어나면 오류가 발생합니다. MerkleTreePath는 compact-runtime에 정의되어 있습니다.

root

TypeScript에서만 호출 가능

root(): MerkleTreeDigest

Merkle 트리의 루트를 가져옵니다. MerkleTreeDigest는 compact-runtime에 정의되어 있습니다.