Solana[part20]_ETF的购买

Solana[part20]_ETF的购买

购买 ETF

基本思路

以 ETF No.1 为例,ETF No.1 包含 jitoSOL 和 mSOL,权重分别为 20%、80%。 「 etf里面不是token账户吗 拿来的sol 」

当前价格

  • 1 JitoSOL = 1.16 SOL
  • 1 mSOL = 1.25 SOL

用户需求与成本计算

用户当前持有 SOL,计划购买 ETF No.1 100 份,需花费:100×20%×1.16+100×80%×1.25=123.2 SOL

方案一:前端 swap

  1. 【用户】 通过 ray 或 okx 等平台,将 123.2 SOL 换出 80 mSOL 和 20 JitoSOL。
  2. 【用户】 执行【Transfer】操作,将 JitoSOL 20 份和 mSOL 80 份转入【合约】。
  3. 【合约】 执行【Mint】操作,向【用户】发行 100 份 ETF No.1。

方案二:合约 swap

  1. 【用户】 执行【Transfer】操作,将 123.2 SOL 转入【合约】。
  2. 【合约】 通过 ray 或 okx 等平台,将 123.2 SOL 换出 80 mSOL 和 20 JitoSOL。
  3. 【合约】 执行【Mint】操作,向【用户】发行 100 份 ETF No.1。

(注:操作中的【Transfer】【Mint】为链上交互动作,需结合具体合约逻辑执行。)

前置准备:

➜  anchor git:(main) ✗ spl-token create-token
Creating token HCux2X4pDQe79mwhAwcfjBPYXf5ocU6VN9HSjxzuJVzk under program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

Address:  HCux2X4pDQe79mwhAwcfjBPYXf5ocU6VN9HSjxzuJVzk
Decimals:  9

Signature: qkrfqj8QKGHWiCSr3DjooVd9EB2FHvSPMfgk95f3R4n2G7AkdoSN1ufoFj6Suw9rYKzxcDJa441uokk5i5xosfC

➜  anchor git:(main) ✗ spl-token create-token
Creating token D5izrwQEikX5FGhzkgG4HgBNWXXaayNy4UF1X1YNVJFW under program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

Address:  D5izrwQEikX5FGhzkgG4HgBNWXXaayNy4UF1X1YNVJFW
Decimals:  9

Signature: aR8akG7j4A15h9Qs4MnUMbMtNA965g5rDSj53oaCyvfXNQsQHYDSVQ6Mw5En8EcMLwfX3AHWNjCWpGciHJQZTbb

➜  anchor git:(main) ✗ spl-token create-account D5izrwQEikX5FGhzkgG4HgBNWXXaayNy4UF1X1YNVJFW
Creating account FKFZdRon44c7UG3sWDhkfdRhsbnjnPdERFHT4eVwZbkM

Signature: 5xoKsk1VmbSYzsVivUv3vQqEjpURMBqPzDDbLDHZ1DsWqJjdqoJbcUAUBAFR5VdGcjrh5ik3mdJo85SRiHgotK8k

➜  anchor git:(main) ✗ spl-token create-account HCux2X4pDQe79mwhAwcfjBPYXf5ocU6VN9HSjxzuJVzk
Creating account For4aUqGLAVwvJCJ7W7xp9oNXAtQQqTdyA5kityMxhkB

Signature: 3o2UV8S756A6vtL4bKgpWQRf8oS5mmQx5RuG8drarjFpnEFwucVyAZoapcRrBVVryukmu8Mxuf7EyrnLJyVy3Rpp

➜  anchor git:(main) ✗ spl-token mint HCux2X4pDQe79mwhAwcfjBPYXf5ocU6VN9HSjxzuJVzk  100
Minting 100 tokens
  Token: HCux2X4pDQe79mwhAwcfjBPYXf5ocU6VN9HSjxzuJVzk
  Recipient: For4aUqGLAVwvJCJ7W7xp9oNXAtQQqTdyA5kityMxhkB

Signature: 5mijdTfBDZvD51zKfhw31JNaxNvZYesCKoHbDD48zCcMkwN1oMqZcjYamjpM4MCAD1fvbsu1BK5sKoHX4Ghiehfo

➜  anchor git:(main) ✗ spl-token mint D5izrwQEikX5FGhzkgG4HgBNWXXaayNy4UF1X1YNVJFW 100
Minting 100 tokens
  Token: D5izrwQEikX5FGhzkgG4HgBNWXXaayNy4UF1X1YNVJFW
  Recipient: FKFZdRon44c7UG3sWDhkfdRhsbnjnPdERFHT4eVwZbkM

Signature: 5ZMfewBZQfrVC7jcE62FtKNKckcDk4WfwiLhqQAmukgGYBpNwnhoirTNHT31oFoaYVje29fhp9ege4KATAiKPt2n

➜  anchor git:(main) ✗ spl-token accounts
Token                                         Balance
-----------------------------------------------------
D5izrwQEikX5FGhzkgG4HgBNWXXaayNy4UF1X1YNVJFW  100
HCux2X4pDQe79mwhAwcfjBPYXf5ocU6VN9HSjxzuJVzk  100

运行成功:

➜  anchor git:(main) ✗ anchor run example
6RQFEKBGuqJAasPDLZEK2Uk3pLMEEo3xfSgz5AvjU65H
4Zcee6VcEoATiTjwMHp9LPsvYLW2tmYmExQFhZ6TkQGYGganfDJGKXSuicAdFrWMZJjWomgunEQ3keGHNEyvfhLN
➜  anchor git:(main) ✗ spl-token accounts
Token                                         Balance
-----------------------------------------------------
6RQFEKBGuqJAasPDLZEK2Uk3pLMEEo3xfSgz5AvjU65H  200
D5izrwQEikX5FGhzkgG4HgBNWXXaayNy4UF1X1YNVJFW  90 
HCux2X4pDQe79mwhAwcfjBPYXf5ocU6VN9HSjxzuJVzk  10 

但是却是两百份

定位问题发现是mint逻辑放在了循环里面,购买了两次