issue_and_set_all_roles 回复 "token name is not human readable"
issue_and_set_all_roles responds with "token name is not human readable"
我有一个智能合约功能,它在内部调用 issue_and_set_all_roles
来发出 SFT 并设置所有角色,但无论代币名称如何,它都会以“代币名称不是人类可读的”作为响应。
智能合约功能:
#[only_owner]
#[payable("EGLD")]
#[endpoint]
fn initiate_sft(
&self,
#[payment] issue_cost: BigUint<Self::Api>,
token_display_name: ManagedBuffer<Self::Api>,
token_ticker: ManagedBuffer<Self::Api>,
) {
let caller = self.blockchain().get_caller();
self
.send()
.esdt_system_sc_proxy()
.issue_and_set_all_roles(
issue_cost,
token_display_name,
token_ticker,
EsdtTokenType::SemiFungible,
0,
)
.async_call()
.with_callback(self.callbacks().initiate_sft_callback(&caller))
.call_and_exit();
}
设置“token name is not human readable”错误的验证逻辑:https://github.com/ElrondNetwork/elrond-go/blob/d6b1389a59f36095203d7cb583318be6adcfa032/vm/systemSmartContracts/esdt.go#L677
根据验证逻辑,“Dummy”之类的名称是可以的。此外,我尝试使用测试网钱包发行具有相同令牌名称的 SFT,并且从测试网钱包生成的 TX 成功。 (TX:https://testnet-explorer.elrond.com/transactions/ebc8a2a87ebd474baf94c8f3a0905e765756c05b733c25d60cfb61616b47dbd1#smart)
我错过了什么?
问题似乎出在尾随的 LF(0A
十六进制)行以令牌名称结尾。
“智能”版本的输入数据中不显示行尾,因此很容易错过。删除它解决了问题。
P.s.: 如果您使用 shell 交互与智能合约交互,删除尾随 LF 的一种方法是使用 | tr -d '\n'
,例如:
TOKEN_DISPLAY_NAME="someName123"
TOKEN_DISPLAY_NAME_HEX=$(echo ${TOKEN_DISPLAY_NAME} | tr -d '\n' | xxd -p)
我有一个智能合约功能,它在内部调用 issue_and_set_all_roles
来发出 SFT 并设置所有角色,但无论代币名称如何,它都会以“代币名称不是人类可读的”作为响应。
智能合约功能:
#[only_owner]
#[payable("EGLD")]
#[endpoint]
fn initiate_sft(
&self,
#[payment] issue_cost: BigUint<Self::Api>,
token_display_name: ManagedBuffer<Self::Api>,
token_ticker: ManagedBuffer<Self::Api>,
) {
let caller = self.blockchain().get_caller();
self
.send()
.esdt_system_sc_proxy()
.issue_and_set_all_roles(
issue_cost,
token_display_name,
token_ticker,
EsdtTokenType::SemiFungible,
0,
)
.async_call()
.with_callback(self.callbacks().initiate_sft_callback(&caller))
.call_and_exit();
}
设置“token name is not human readable”错误的验证逻辑:https://github.com/ElrondNetwork/elrond-go/blob/d6b1389a59f36095203d7cb583318be6adcfa032/vm/systemSmartContracts/esdt.go#L677
根据验证逻辑,“Dummy”之类的名称是可以的。此外,我尝试使用测试网钱包发行具有相同令牌名称的 SFT,并且从测试网钱包生成的 TX 成功。 (TX:https://testnet-explorer.elrond.com/transactions/ebc8a2a87ebd474baf94c8f3a0905e765756c05b733c25d60cfb61616b47dbd1#smart)
我错过了什么?
问题似乎出在尾随的 LF(0A
十六进制)行以令牌名称结尾。
“智能”版本的输入数据中不显示行尾,因此很容易错过。删除它解决了问题。
P.s.: 如果您使用 shell 交互与智能合约交互,删除尾随 LF 的一种方法是使用 | tr -d '\n'
,例如:
TOKEN_DISPLAY_NAME="someName123"
TOKEN_DISPLAY_NAME_HEX=$(echo ${TOKEN_DISPLAY_NAME} | tr -d '\n' | xxd -p)