XC-20概述¶
概览¶
跨共识信息格式(XCM)定义了两条互操作区块链之间传递信息的方式。此格式为Moonbeam/Moonriver与中继链或是其他波卡/Kusama生态内平行链之间打开了传递信息和资产的大门。
Substrate资产具有原生可互操作性。然而,开发者需要使用Substrate API与其交互。而这使开发者的体验感降低,尤其是来自以太坊生态的开发者。因此,为了协助开发者上手波卡和Kusama提供的原生互操作性,Moonbeam引入了XC-20概念。
XC-20为Moonbeam上独特的资产类别,其结合了Substrate资产的优点(原生可互操作性)但又使开发者能够通过预编译合约(以太坊API)使用熟悉的ERC-20接口与之交互。在EVM方面,XC-20具有ERC-20接口,因此智能合约和用户可以轻松地与其交互 ,并且无需了解 Substrate。这最终为开发人员在处理这些类型的资产时提供了更大的灵活性,并允许与基于EVM的智能合约(例如DEX和借贷平台等)无缝集成。 此外,开发人员可以将XC-20与常规的以太坊开发框架或dApp集成,并使用此类资产创建互连合约策略。此外,随着RT2301的引入,所有ERC-20都已支持XCM,这意味着它们也可以作为XC-20。
此页面涵盖了XC-20的基本概念,如果您想要了解如何与之交互或转移XC-20,请参考与XC-20交互或使用X-Tokens Pallet发送XC-20教程。
XC-20类型¶
目前有两种XC-20类型:本地XC-20和外部XC-20。
什么是本地XC-20?¶
本地XC-20是EVM上存在的所有ERC-20,可以通过XCM跨链传输。为了将本地XC-20转移到另一个平行链,资产需要在该链上注册。转移本地XC-20时,实际的Token存在于Moonbeam上目标链的主权账户中。本地XC-20必须遵循本教程中ERC-20接口部分,它们不能自定义ERC-20。 更具体地说,transfer
函数的函数选择器必须如EIP-20中所述:
function transfer(address _to, uint256 _value) public returns (bool success)
如果transfer
函数的函数选择器偏离标准,则跨链转账将会失败。
什么是外部XC-20?¶
外部XC-20是从其他平行链或中继链转移到Moonbeam的原生跨链资产。这些资产的核心是Substrate资产。当转移外部XC-20时,实际的Token存在于每条链的Moonbeam主权账户中。所有的外部XC-20资产使用_xc_作为其名称的前缀与其他资产类别进行区分。
本地XC-20与外部XC-20的区别¶
与其他Substrate资产一样,两种类型的XC-20都可以通过以太坊和Substrate API轻松发送到生态系统中的其他平行链。 但是,使用Substrate API进行XCM转移将为本地XC-20发出EVM日志,但不会为外部XC-20发出EVM日志。建议使用以太坊API,通过基于EVM的浏览器(例如Moonscan)提供对XCM操作的更多可见性。
在 Moonbeam上,本地XC-20只能通过其常规ERC-20接口进行转移。 相反,外部XC-20可以通过两个接口(Substrate和ERC-20)进行转移。如果外部XC-20通过Substrate API转移,则基于EVM的区块浏览器将看不到该交易。只有通过以太坊API完成的交易才能通过此类浏览器可见。
两种资产类型的主要区别在于本地XC-20时EVM ERC-20,其具有XCM功能,然而外部XC-20是Substrate资产,顶部具有ERC-20接口。
XC-20的跨链资产转移可以通过X-Tokens Pallet完成。要了解如何使用X-Tokens Pallet转移XC-20s,您可以参考使用X-Tokens Pallet发送XC-20s的教程。
当前可用的外部XC-20列表¶
每个网络当前可用的外部XC-20资产列表如下所示:
来源 | 符号 | XC-20地址 |
---|---|---|
Polkadot | xcDOT | 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 |
Acala | xcaUSD | 0xfFfFFFFF52C56A9257bB97f4B2b6F7B2D624ecda |
Acala | xcACA | 0xffffFFffa922Fef94566104a6e5A35a4fCDDAA9f |
Astar | xcASTR | 0xFfFFFfffA893AD19e540E172C10d78D4d479B5Cf |
Bifrost | xcBNC | 0xffffffff7cc06abdf7201b350a1265c62c8601d2 |
Darwinia | xcRING | 0xFfffFfff5e90e365eDcA87fB4c8306Df1E91464f |
Interlay | xcIBTC | 0xFFFFFfFf5AC1f9A51A93F5C527385edF7Fe98A52 |
Interlay | xcINTR | 0xFffFFFFF4C1cbCd97597339702436d4F18a375Ab |
Parallel | xcPARA | 0xFfFffFFF18898CB5Fe1E88E668152B4f4052A947 |
Phala | xcPHA | 0xFFFfFfFf63d24eCc8eB8a7b5D0803e900F7b6cED |
Statemint | xcUSDT | 0xFFFFFFfFea09FB06d082fd1275CD48b191cbCD1d |
*您可以在Polkadot.js Apps上查看每个资产ID
来源 | 符号 | XC-20地址 |
---|---|---|
Kusama | xcKSM | 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 |
Bifrost | xcBNC | 0xFFfFFfFFF075423be54811EcB478e911F22dDe7D |
Calamari | xcKMA | 0xffffffffA083189F870640B141AE1E882C2B5BAD |
Crab | xcCRAB | 0xFFFffFfF8283448b3cB519Ca4732F2ddDC6A6165 |
Crust-Shadow | xcCSM | 0xffFfFFFf519811215E05eFA24830Eebe9c43aCD7 |
Heiko | xcHKO | 0xffffffFF394054BCDa1902B6A6436840435655a3 |
Integritee | xcTEER | 0xFfFfffFf4F0CD46769550E5938F6beE2F5d4ef1e |
Karura | xcKAR | 0xFfFFFFfF08220AD2E6e157f26eD8bD22A336A0A5 |
Karura | xcaUSD | 0xFfFffFFfa1B026a00FbAA67c86D5d1d5BF8D8228 |
Khala | xcPHA | 0xffFfFFff8E6b63d9e447B6d4C45BDA8AF9dc9603 |
Kintsugi | xcKINT | 0xfffFFFFF83F4f317d3cbF6EC6250AeC3697b3fF2 |
Kintsugi | xckBTC | 0xFFFfFfFfF6E528AD57184579beeE00c5d5e646F0 |
Litmus | xcLIT | 0xfffFFfFF31103d490325BB0a8E40eF62e2F614C0 |
Robonomics | xcXRT | 0xFffFFffF51470Dca3dbe535bD2880a9CcDBc6Bd9 |
Shiden | xcSDN | 0xFFFfffFF0Ca324C842330521525E7De111F38972 |
Statemine | xcRMRK | 0xffffffFF893264794d9d57E1E0E21E0042aF5A0A |
Statemine | xcUSDT | 0xFFFFFFfFea09FB06d082fd1275CD48b191cbCD1d |
*您可以在Polkadot.js Apps上查看每个资产ID
来源 | 符号 | XC-20地址 |
---|---|---|
Relay Chain Alphanet | xcUNIT | 0xFfFFfFff1FcaCBd218EDc0EbA20Fc2308C778080 |
Basilisk Alphanet | xcBSX | 0xFFfFfFfF4d0Ff56d0097BBd14920eaC488540BFA |
Clover Alphanet | xcCLV | 0xFfFfFffFD3ba399d7D9d684D94b22767a5FA1cCA |
Crust/Shadow Alphanet | xcCSM | 0xffFfFFFf519811215E05eFA24830Eebe9c43aCD7 |
Integritee Alphanet | xcTEER | 0xFfFfffFf4F0CD46769550E5938F6beE2F5d4ef1e |
Kintsugi Alphanet | xckBTC | 0xFffFfFff5C2Ec77818D0863088929C1106635d26 |
Kintsugi Alphanet | xcKINT | 0xFFFfffff27C019790DFBEE7cB70F5996671B2882 |
Litentry Alphanet | xcLIT | 0xfffFFfFF31103d490325BB0a8E40eF62e2F614C0 |
Pangolin Alphanet | xcPARING | 0xFFFffFfF8283448b3cB519Ca4732F2ddDC6A6165 |
Statemine Alphanet | xcTT1 | 0xfFffFfFf75976211C786fe4d73d2477e222786Ac |
*您可以在Polkadot.js Apps上查看每个资产ID
检索外部XC-20列表¶
要获取当前可用的外部XC-20列表以及其关联的元数据,您可以使用Polkadot.js API查询链状态。为此,您可以遵循以下步骤:
-
为您想要获取其资产列表的网络创建一个API提供商。 您可以为每个网络使用以下WSS端点:
wss://wss.api.moonbeam.network
wss://wss.api.moonriver.moonbeam.network
wss://wss.api.moonbase.moonbeam.network
-
查询所有资产的
assets
pallet - 迭代资产列表以获取所有资产ID及其关联的元数据
import { ApiPromise, WsProvider } from '@polkadot/api'; // Version 9.13.6
const getXc20s = async () => {
// 1. Create API provider
const substrateProvider = new WsProvider(
'wss://wss.api.moonbase.moonbeam.network'
);
const api = await ApiPromise.create({ provider: substrateProvider });
// 2. Query the assets pallet for all assets
const assets = await api.query.assets.asset.entries();
// 3. Get metadata for each asset using the ID
assets.forEach(
async ([
{
args: [id],
},
]) => {
const metadata = await api.query.assets.metadata(id);
console.log(`Asset ID: ${id}`);
console.log(`Metadata: ${metadata}`);
console.log('-----');
}
);
api.disconnect();
};
getXc20s();
结果将显示资产ID以及所有已注册外部XC-20的一些附加信息。
| Created: January 4, 2022