개념
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- 관련 허용량이 커버하는 경우에만 컨트랙트가 실행됩니다 (ContractRegistrationRequest의GranterAddress에 의해 제공됨)Dual- 컨트랙트가 허용량의 자금을 우선적으로 사용합니다. 허용량이 실행 비용을 커버할 수 없는 경우, 자체 자금을 대신 사용합니다
x/feegrant 모듈에서 제공하는 3가지 종류의 허용량(Basic, Periodic, AllowedMsg)이 있으므로, wasmx 모듈은 Basic과 Periodic만 지원합니다. 컨트랙트에 AllowedMsgAllowance를 부여하는 것은 권장되지 않으며, 이 종류의 허용량을 사용하려는 모든 컨트랙트는 기본적으로 오류가 발생합니다.
