메인 콘텐츠로 건너뛰기

개념

Begin blocker 실행

스마트 컨트랙트는 들어오는 메시지에만 응답할 수 있으며, 자체 스케줄에 따라 액션을 실행하는 기능이 없습니다. Wasmx 모듈은 컨트랙트를 등록하고 각 블록의 begin blockers 섹션에서 호출할 수 있도록 합니다. 이를 위해 등록된 각 컨트랙트는 begin_blocker라는 sudo 메시지에 응답해야 하며, 이 메시지는 체인 자체에서만 호출할 수 있고 사용자나 다른 컨트랙트가 직접 호출할 수 없습니다. 이를 통해 “begin_blocker” 메시지를 신뢰할 수 있습니다.

등록

컨트랙트를 등록할 때, 사용자는 컨트랙트 실행에 지불할 의향이 있는 금액인 가스 가격과 컨트랙트 실행 중 소비될 수 있는 최대 가스 양인 가스 한도를 선언해야 합니다. 현재 컨트랙트 등록은 거버넌스 제안을 통해서만 가능합니다. 이 제안이 승인되면 특정 주소의 컨트랙트가 각 “begin blockers” 기간 동안 실행되는 컨트랙트 목록에 추가됩니다. 보안상의 이유로, 제안자는 컨트랙트의 code_id를 지정해야 하며, 이는 등록 시와 컨트랙트가 실행될 때마다 검증됩니다. 이는 공격자가 양성 컨트랙트를 등록한 후 나중에 악성 컨트랙트로 업그레이드하는 것을 방지하기 위함입니다. 제안자는 새 버전의 컨트랙트가 릴리스될 때 지연을 피하기 위해 컨트랙트 등록 시 이 검사에서 면제를 요청할 수 있지만, 이는 제안자의 신뢰도에 따라 투표 결과에 영향을 미칠 수 있습니다. 제안자는 또한 컨트랙트를 “고정(pinned)“하도록 요청할 수 있으며, 이는 컨트랙트가 메모리에 로드되어 유지됨을 의미하고 컨트랙트의 성능을 크게 향상시킬 수 있습니다.

등록 해제

컨트랙트는 거버넌스 제안을 통해 등록 해제될 수 있으며, 이는 컨트랙트가 더 이상 필요하지 않은 경우 컨트랙트 소유자를 포함한 누구나, 또는 컨트랙트가 악성으로 판명된 경우 다른 개인이 시작할 수 있습니다. 컨트랙트가 가스 부족으로 실행에 실패하면 자동으로 등록 해제됩니다. 컨트랙트가 등록 해제되면, wasmx는 컨트랙트에서 특별한 deregister{} 콜백(존재하는 경우)을 sudo 메시지로 호출합니다.

비활성화

컨트랙트는 가스가 부족하면 자동으로 비활성화되거나, 컨트랙트 소유자가 수동으로 비활성화할 수 있습니다. 컨트랙트가 비활성화되면, wasmx는 컨트랙트에서 특별한 deactivate{} 콜백(존재하는 경우)을 sudo 메시지로 호출합니다. 컨트랙트는 컨트랙트 소유자가 다시 활성화할 수 있습니다.

Fee Grant

Wasmx 모듈은 x/feegrant 모듈을 통해 다른 주소(컨트랙트, EOA)가 다른 컨트랙트의 Begin blocker 실행 비용을 지불할 수 있도록 합니다. 컨트랙트가 처음 등록될 때, 사용자는 컨트랙트의 실행이 어떻게 자금 지원될지를 나타내는 FundingMode를 지정합니다. 세 가지 모드가 지원됩니다:
  • SelfFunded - 컨트랙트가 자체 실행 비용을 지불합니다 (기본값)
  • GrantOnly - 관련 허용량이 커버하는 경우에만 컨트랙트가 실행됩니다 (ContractRegistrationRequestGranterAddress에 의해 제공됨)
  • Dual - 컨트랙트가 허용량의 자금을 우선적으로 사용합니다. 허용량이 실행 비용을 커버할 수 없는 경우, 자체 자금을 대신 사용합니다
x/feegrant 모듈에서 제공하는 3가지 종류의 허용량(Basic, Periodic, AllowedMsg)이 있으므로, wasmx 모듈은 Basic과 Periodic만 지원합니다. 컨트랙트에 AllowedMsgAllowance를 부여하는 것은 권장되지 않으며, 이 종류의 허용량을 사용하려는 모든 컨트랙트는 기본적으로 오류가 발생합니다.

일시 중지, 파라미터 업데이트

컨트랙트 소유자는 거버넌스 투표 없이 언제든지 컨트랙트를 비활성화하거나 활성화할 수 있습니다. 또한 가스 가격이나 가스 한도와 같은 컨트랙트 실행 파라미터를 언제든지 업데이트할 수 있습니다.

배치 메서드

편의를 위해 Wasmx 모듈은 배치 등록 및 등록 해제, 그리고 StoreCodeProposal의 배치 버전과 같은 앞서 언급한 일부 제안의 배치 버전을 제공합니다. 이러한 배치 버전은 개별적으로 처리하는 대신 여러 제안을 동시에 처리할 수 있도록 합니다.