메인 콘텐츠로 건너뛰기

MsgPrivilegedExecuteContract

MsgPrivilegedExecuteContract는 권한 있는 기능으로 exchange 모듈에서 Cosmwasm 컨트랙트를 실행하기 위한 메서드를 정의합니다.
type MsgPrivilegedExecuteContract struct {
	Sender string
	// funds는 실행 자금을 조달하는 데 사용되는 사용자의 bank 코인을 정의합니다 (예: 100inj).
	Funds github_com_cosmos_cosmos_sdk_types.Coins
	// contract_address는 실행할 컨트랙트 주소를 정의합니다
	ContractAddress string
	// data는 컨트랙트 실행 시 사용되는 call data를 정의합니다
	Data string
}

필드 설명
  • Sender는 이 msg의 creator를 설명합니다.
  • Funds는 실행 자금을 조달하는 데 사용되는 사용자의 bank 코인을 정의합니다 (예: 100inj).
  • ContractAddress는 실행할 컨트랙트 주소를 정의합니다.
  • Data는 컨트랙트 실행 시 사용되는 call data를 정의합니다. 자세한 내용은 아래를 참조하세요.
컨트랙트 인터페이스 컨트랙트에서 권한 있는 작업을 활성화하려면 다음 execute 메서드를 구현해야 합니다:
InjectiveExec {
    origin: String,
    name: String,
    args: MyArgs,
}
  • origin 필드는 권한 있는 작업을 보낸 사용자의 주소입니다. 이 필드를 직접 설정할 필요가 없으며 exchange 모듈에서 설정됩니다.
  • name 필드는 권한 있는 작업의 이름입니다. 원하는 대로 정의할 수 있습니다.
  • args 필드는 권한 있는 작업의 인수입니다. 원하는 대로 정의할 수 있습니다.
Golang에서 Data 문자열의 완전한 정의는 다음과 같습니다:
type ExecutionData struct {
	Origin string      `json:"origin"`
	Name   string      `json:"name"`
	MyArgs   interface{} `json:"args"`
}
그런 다음 사용자는 다음 데이터로 MsgPrivilegedExecuteContract를 보내 권한 있는 작업을 호출할 수 있습니다:
{
	sender: "inj...",
	funds: "1000000000000000000inj",
	contract_address: "inj...",
	data: {
		origin: "inj...",
		name: "my_privileged_action",
		args: {
			...
		}
	}
}
지원되는 권한 있는 작업 현재 두 가지 지원되는 권한 있는 작업이 있습니다:
type PrivilegedAction struct {
	SyntheticTrade   *SyntheticTradeAction `json:"synthetic_trade"`
	PositionTransfer *PositionTransfer     `json:"position_transfer"`
}
이러한 권한 있는 작업은 Cosmwasm response data 필드 내에 설정되어야 합니다. 예:
let privileged_action = PrivilegedAction {
    synthetic_trade: None,
    position_transfer: position_transfer_action,
};
response = response.set_data(to_binary(&privileged_action)?);
PositionTransfer Position transfer는 컨트랙트가 자체 subaccount에서 사용자의 subaccount로 derivative 포지션을 전송할 수 있게 합니다. 포지션은 청산 가능하지 않아야 합니다. 수신자만 잔액에서 차감되는 taker trading fee를 지불합니다. 현재 컨트랙트의 subaccount에서 사용자의 subaccount로의 전송만 지원됩니다.
type PositionTransfer struct {
    MarketID                common.Hash `json:"market_id"`
    SourceSubaccountID      common.Hash `json:"source_subaccount_id"`
    DestinationSubaccountID common.Hash `json:"destination_subaccount_id"`
    Quantity                math.LegacyDec     `json:"quantity"`
}
SyntheticTrade Synthetic trade는 컨트랙트가 derivative markets에서 사용자를 대신하여 synthetic trade를 실행할 수 있게 합니다. 이것은 오더북에 영향을 미치지 않으며 순전히 synthetic trade입니다. Taker trading fees는 여전히 적용됩니다. Subaccount ids는 컨트랙트의 subaccount id와 사용자의 subaccount id로 설정되어야 합니다.
type SyntheticTradeAction struct {
	UserTrades     []*SyntheticTrade `json:"user_trades"`
	ContractTrades []*SyntheticTrade `json:"contract_trades"`
}

type SyntheticTrade struct {
	MarketID     common.Hash `json:"market_id"`
	SubaccountID common.Hash `json:"subaccount_id"`
	IsBuy        bool        `json:"is_buy"`
	Quantity     math.LegacyDec     `json:"quantity"`
	Price        math.LegacyDec     `json:"price"`
	Margin       math.LegacyDec     `json:"margin"`
}