상태
각 계정에는 메타데이터와 모든 컨트랙트 관련 데이터 (컨트랙트 코드 + 스토리지)를 저장하는 '상태'가 있습니다 .
계정의 상태는 네트워크의 모든 사람이 읽을 수 있지만, 계정만이 변경 가능합니다.
각 계정은 사용된 공간에 비례하여 잔고의 일부를 잠그는 형태로 자체 스토리지 비용을 지불합니다.
계정의 메타데이터
상태는 컨트랙트에서 관련 메타데이터를 추적합니다. 특히 상태는 다음 필드를 저장합니다.
amount
: yoctoNEAR(1 Ⓝ = 1024yⓃ)로 표현되는 계정 잔고입니다.code_hash
: 컨트랙트의 Wasm 파일 해시로, 컨트랙트가 없는 경우1s
로 채워집니다.storage_usage
: 계정(코드 + 메타데이터 + 데이터 스토리지)이 저장하는 데 사용하는 바이트의 양입니다.
info
다음 near cli 명령어를 실행하여 계정 메타데이터를 확인할 수 있습니다 .
near state hello-nearverse.testnet
컨트랙트의 상태
상태는 컨트랙트 코드와 컨트랙트 스토리지가 모두 저장 되는 장소이기도 합니다 .
컨트랙트 스토리지는 base64 및 JSON 직렬화(또는 Rust의 Borsh)를 사용하여 인코딩된 키-값 쌍 으로 구성됩니다 .
info
다음 near cli 명령어를 실행하여 계정 컨트랙트 상태를 확인할 수 있습니다 .
near view-state hello-nearverse.testnet --finality final --utf8 true
tip
컨트랙트를 개발할 때, SDK가 스토리지 직렬화를 처리해주기 때문에 더 중요한 것들에 집중할 수 있습니다.
스토리지 비용 지불(1 Ⓝ ~ 100kb)
스토리지 비용을 지불하기 위해 계정은 저장되는 데이터 양에 비례하여 잔고의 일부를 잠가야 합니다. 이는 다음을 의미합니다.
- 더 많은 데이터가 추가되어 상태가 증가하면 ↑, 계정의 잔고는 감소합니다 ↓.
- 데이터가 삭제되어 상태가 감소하면 ↓, 계정의 잔고는 증가합니다 ↑.
현재 100kb의 데이터 를 저장하는 데 대략 1Ⓝ의 비용이 듭니다.