Skip to main content

Ledger data types

Compact 언어 버전 0.22.0, 컴파일러 버전 0.30.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에 정의되어 있습니다.