메인 콘텐츠로 건너뛰기

개요

staking precompile 컨트랙트는 Stable SDK의 x/staking 모듈 기능을 EVM 환경에서 사용할 수 있도록 브리지 역할을 합니다.

목차

  1. 개념
  2. 구성
  3. 메서드
  4. 이벤트

개념

Stable SDK의 x/staking 모듈에서는 스테이킹을 위해 체인 초기화 시 bond denom이 등록되어야 합니다. Validator와 delegator는 bond denom 스테이킹 토큰만 사용할 수 있습니다. staking precompile 컨트랙트에서는 validator 또는 delegator가 호출자인지 확인하는 추가 검증이 수행됩니다.

구성

컨트랙트 주소와 가스 비용은 사전에 정의되어 있습니다.

컨트랙트 주소

  • 0x0000000000000000000000000000000000000800

메서드

createValidator

Validator가 생성됩니다. Validator는 운영자의 초기 delegation과 함께 생성되어야 합니다. 잠재적인 delegator를 위해 validator는 자신의 정보와 수수료율 계획을 제공해야 합니다. Delegator는 시장 메커니즘의 자연스러운 규제를 통해 공개된 정보를 바탕으로 자신의 토큰을 위임할 validator를 선택할 수 있습니다. Validator가 성공적으로 등록되면 CreateValidator 이벤트가 발생합니다.

Inputs

NameTypeDescription
descriptionDescriptionvalidator의 정보
commissionRatesCommissionRatesvalidator가 보상받는 스테이킹 토큰의 수수료율
minSelfDelegationuint256validator의 최소 자체 위임 금액
validatorAddressaddressvalidator의 주소
pubkeystringvalidator의 공개 키
valueuint256validator에게 초기 자체 위임되는 스테이킹 토큰의 양
Description은 다음 필드를 가진 구조체입니다:
NameTypeDescription
monikerstringvalidator의 이름
identitystringvalidator의 신원
websitestringvalidator 웹사이트의 URL
securityContactstring보안 연락처 정보
detailsstringvalidator의 추가 설명
CommissionRates는 다음 필드를 가진 구조체입니다:
NameTypeDescription
rateuint256validator가 받는 현재 수수료율
maxRateuint256최대 수수료율 (이보다 높게 설정할 수 없음)
maxChangeRateuint256validator가 하루에 변경할 수 있는 최대 수수료율
rate는 시장에서 수용 가능한 적절한 값으로 설정해야 합니다.
  • Validator의 수수료율이 높으면 delegator의 수익이 낮아집니다.
  • Validator의 수수료율이 낮으면 validator의 수익이 낮아지고 운영이 어려워집니다.
높은 maxRate는 validator의 예상치 못한 높은 수수료율에 대한 delegator의 우려를 야기할 수 있으므로 maxRate는 신중하게 설정해야 합니다. maxChangeRate는 초기화 후 변경할 수 없습니다.

Outputs

NameTypeDescription
successboolvalidator가 성공적으로 등록되면 true

editValidator

Validator가 정보를 업데이트합니다. Validator는 CommissionRates 구조체의 maxRatemaxChangeRate와 같이 변경 불가능한 필드를 제외한 정보만 업데이트할 수 있습니다. Validator가 성공적으로 업데이트되면 EditValidator 이벤트가 발생합니다.

Inputs

NameTypeDescription
descriptionDescriptionvalidator의 정보
validatorAddressaddressvalidator의 주소
commissionRateint256validator가 보상받는 스테이킹 토큰의 수수료율
minSelfDelegationint256validator의 최소 자체 위임 금액

Outputs

NameTypeDescription
successboolvalidator가 성공적으로 업데이트되면 true

delegate

Delegator가 validator에게 위임할 토큰의 양을 설정합니다. Delegation이 성공적으로 완료되면 Delegate 이벤트가 발생합니다.

Inputs

NameTypeDescription
delegatorAddressaddressdelegator의 주소
validatorAddressstringvalidator의 주소
amountuint256validator에게 위임되는 스테이킹 토큰의 양

Outputs

NameTypeDescription
successbooldelegation이 성공적으로 완료되면 true

Events

newShares는 delegator의 소유 비율을 나타냅니다. 동일한 양의 토큰이 위임되더라도 시간에 따라 계산되는 shares는 달라질 수 있습니다.

undelegate

Delegator가 validator에게 위임한 토큰의 양을 인출합니다. 언델리게이션이 성공적으로 완료되면 Unbond 이벤트가 발생합니다.

Inputs

NameTypeDescription
delegatorAddressaddressdelegator의 주소
validatorAddressstringvalidator의 주소
amountuint256validator로부터 언델리게이트하려는 스테이킹 토큰의 양

Outputs

NameTypeDescription
successbool언델리게이션이 성공적으로 완료되면 true

redelegate

Delegator가 validator에게 위임한 토큰의 양을 다른 validator에게 재위임합니다. 재위임이 성공적으로 완료되면 Redelegate 이벤트가 발생합니다.

Inputs

NameTypeDescription
delegatorAddressaddressdelegator의 주소
validatorSrcstring출발지 validator의 주소
validatorDststring목적지 validator의 주소
amountuint256재위임할 스테이킹 토큰의 양

Outputs

NameTypeDescription
successbool재위임이 성공적으로 완료되면 true

delegation

Delegator와 validator 간의 delegation 정보를 반환합니다. Delegation을 찾을 수 없으면 sharesbalance0이 됩니다.

Inputs

NameTypeDescription
delegatorAddressaddressdelegator의 주소
validatorAddressstringvalidator의 주소

Outputs

NameTypeDescription
sharesuint256위임된 shares
balanceCoin위임된 토큰의 양과 denom
Coin은 다음 필드를 가진 구조체입니다:
NameTypeDescription
denomstring보상의 denom
amountuint256보상의 양

unbondingDelegation

Delegator와 validator 간의 언본딩 delegation 정보를 반환합니다. 언본딩 delegation을 찾을 수 없으면 빈 UnbondingDelegationOutput이 반환됩니다.

Inputs

NameTypeDescription
delegatorAddressaddressdelegator의 주소
validatorAddressstringvalidator의 주소

Outputs

NameTypeDescription
unbondingDelegationUnbondingDelegationOutput언본딩 delegation의 정보
UnbondingDelegationOutput은 다음 필드를 가진 구조체입니다:
NameTypeDescription
validatorAddressstringvalidator의 주소
delegatorAddressstringdelegator의 주소
entriesUnbondingDelegationEntry[]언본딩 delegation의 항목들
UnbondingDelegationEntry는 다음 필드를 가진 구조체입니다:
NameTypeDescription
creationHeightuint64항목의 생성 높이
completionTimeuint64항목의 완료 시간
initialBalanceCoin항목의 초기 잔액
balanceCoin항목의 잔액

validator

Validator 정보를 반환합니다. Validator를 찾을 수 없으면 빈 ValidatorOutput이 반환됩니다.

Inputs

NameTypeDescription
validatorAddressaddressvalidator의 주소

Outputs

NameTypeDescription
validatorValidatorvalidator의 정보
Validator는 다음 필드를 가진 구조체입니다:
NameTypeDescription
operatorAddressstringvalidator의 주소
consensusPubkeystringvalidator의 공개 키
jailedboolvalidator가 jailed 상태인지 여부
statusint32validator의 상태
tokensuint256validator에게 위임된 스테이킹 토큰의 양
delegatorSharesuint256delegation shares의 양
descriptionstringvalidator의 설명
unbondingHeightint64validator가 언본딩 중인 높이
unbondingTimeint64validator가 언본딩 중인 시간
commissionuint256validator가 보상받는 스테이킹 토큰의 수수료율
minSelfDelegationuint256validator의 최소 자체 위임 금액

validators

상태와 일치하는 모든 validator를 반환합니다. Validator를 찾을 수 없으면 빈 ValidatorsOutput이 반환됩니다. x/staking 모듈에서 선언된 상태는 다음 중 하나일 수 있습니다:
  • 0 : “BOND_STATUS_UNSPECIFIED”, 지정되지 않은 상태
  • 1 : “BOND_STATUS_UNBONDING”, validator가 언본딩 중
  • 2 : “BOND_STATUS_UNBONDED”, validator가 언본딩됨
  • 3 : “BOND_STATUS_BONDED”, validator가 본딩됨

Inputs

NameTypeDescription
statusstringvalidator의 상태
pageRequestPageReq페이지네이션 요청
PageReq는 다음 필드를 가진 구조체입니다:
NameTypeDescription
keybytes페이지의 키
offsetint64페이지의 오프셋
limitint64페이지의 제한
countTotalbool결과의 총 개수를 세어야 하는지 여부
reversebool결과를 역순으로 정렬할지 여부

Outputs

NameTypeDescription
validatorsValidator[]validator들의 배열
pageResponsePageResp페이지네이션 응답
PageResp는 다음 필드를 가진 구조체입니다:
NameTypeDescription
nextKeybytes다음 페이지의 키
totaluint64결과의 총 개수

redelegation

Delegator, 출발지 validator, 목적지 validator의 재위임 정보를 반환합니다. 재위임을 찾을 수 없으면 빈 RedelegationOutput이 반환됩니다.

Inputs

NameTypeDescription
delegatorAddressaddressdelegator의 주소
srcValidatorAddressstring출발지 validator의 주소
dstValidatorAddressstring목적지 validator의 주소

Outputs

NameTypeDescription
redelegationRedelegationOutput재위임의 정보
RedelegationOutput은 다음 필드를 가진 구조체입니다:
NameTypeDescription
delegatorAddressstringdelegator의 주소
validatorSrcAddressstring출발지 validator의 주소
validatorDstAddressstring목적지 validator의 주소
entriesRedelegationEntry[]재위임의 항목들
RedelegationEntry는 다음 필드를 가진 구조체입니다:
NameTypeDescription
creationHeightuint64항목의 생성 높이
completionTimeuint64항목의 완료 시간
initialBalanceCoin항목의 초기 잔액
balanceCoin항목의 잔액

redelegations

Delegator, 출발지 validator, 목적지 validator의 모든 재위임을 반환합니다. 재위임을 찾을 수 없으면 빈 RedelegationResponsePageResp가 반환됩니다.

Inputs

NameTypeDescription
delegatorAddressaddressdelegator의 주소
srcValidatorAddressstring출발지 validator의 주소
dstValidatorAddressstring목적지 validator의 주소
pageRequestPageReq페이지네이션 요청

Outputs

NameTypeDescription
responseRedelegationResponse[]재위임들의 정보
pageResponsePageResp페이지네이션 응답

이벤트

CreateValidator

NameTypeIndexedDescription
valiAddraddressYvalidator의 주소
valueuint256Nvalidator에게 초기 자체 위임되는 스테이킹 토큰의 양

EditValidator

NameTypeIndexedDescription
valiAddraddressYvalidator의 주소
commissionRateint256Nvalidator가 보상받는 스테이킹 토큰의 업데이트된 수수료율
minSelfDelegationint256Nvalidator의 업데이트된 최소 자체 위임 금액

Delegate

NameTypeIndexedDescription
delegatorAddraddressYdelegator의 주소
validatorAddrstringYvalidator의 주소
amountuint256Nvalidator에게 위임되는 스테이킹 토큰의 양
newSharesuint256Ndelegation 이후의 delegation shares의 양

Unbond

NameTypeIndexedDescription
delegatorAddraddressYdelegator의 주소
validatorAddrstringYvalidator의 주소
amountuint256Nvalidator로부터 언델리게이트된 스테이킹 토큰의 양
completionTimeuint256N언델리게이션의 완료 시간

Redelegate

NameTypeIndexedDescription
delegatorAddraddressYdelegator의 주소
validatorSrcAddressstringY출발지 validator의 주소
validatorDstAddressstringY목적지 validator의 주소
amountuint256N재위임할 스테이킹 토큰의 양
completionTimeuint256N재위임의 완료 시간