1 个不稳定版本
0.1.0 | 2022年3月15日 |
---|
#12 in #elfo
35KB
812 行
Elfo Protocol允许在Solana区块链上实现订阅支付。
该协议由三个主要组件组成。
核心程序(智能合约)
[此仓库]
Elfo节点CLI
[ github.com/elfo-protocol/elfo-node ]
Elfo JavaScript SDK
[github.com/elfo-protocol/elfo-sdk]
核心程序
程序使用anchor协议编写。下面的指令构成了协议。
create_subscription_plan
创建订阅计划。
create_subscription_plan( plan_name
, subscription_amount
, frequency
, feePercentage
)
参数
名称 | 类型 | 描述 |
---|---|---|
plan_name |
String |
指定订阅计划名称的字符串 |
subscription_amount |
i64 |
以USDC表示的订阅金额,包含小数 |
frequency |
i64 |
以秒为单位的订阅频率 |
feePercentage |
i8 |
一个介于1-5之间的整数,指定将费用百分比分配给节点的比例。百分比越高,节点监控和触发支付的激励越大。 |
账户
名称 | 描述 | 参考文献 & 备注 |
---|---|---|
authority |
创建订阅计划的账户 | 签名者 |
protocol_state |
Elfo协议状态账户 | ELFO_PROTOCOL_STATE |
subscription_plan_author |
订阅支付授权账户(如果需要则初始化)。 | SubscriptionPlanAuthor.address |
subscription_plan |
订阅计划账户(初始化)。 | SubscriptionPlan.address |
subscription_plan_payment_account |
订阅授权方的USDC关联代币账户,用于接收支付。 | getAssociateTokenAddress |
mint |
USDC铸币账户。 | USDC Mint |
token_program |
代币程序 | TOKEN_PROGRAM_ID |
associated_token_program |
关联代币程序 | ASSOCIATED_TOKEN_PROGRAM_ID |
system_program |
系统程序 | SystemProgram.programId |
rent |
租金程序 | SYSVAR_RENT_PUBKEY |
subscribe
代表(批准)所需代币并订阅订阅计划。
订阅 ( how_many_cycles
)
参数
名称 | 类型 | 描述 |
---|---|---|
how_many_cycles |
i64 |
资金应委托多少周期 |
账户
名称 | 描述 | 参考文献 & 备注 |
---|---|---|
who_subscribes |
订阅计划的账户。 | 签名者 |
protocol_signer |
Elfo协议签名账户。 | ELFO_PROTOCOL_SIGNER |
subscription |
订阅账户(init_if_needed) | Subscription.address |
subscriber |
订阅者账户(init_if_needed) | Subscriber.address |
subscriber_payment_account |
订阅者委托支付的USDC关联代币账户。 | getAssociateTokenAddress |
subscription_plan |
订阅计划账户 | SubscriptionPlan.address |
subscription_plan_payment_account |
订阅授权方的USDC关联代币账户,用于接收支付。 | getAssociateTokenAddress |
mint |
USDC铸币账户。 | USDC Mint |
token_program |
代币程序 | TOKEN_PROGRAM_ID |
associated_token_program |
关联代币程序 | ASSOCIATED_TOKEN_PROGRAM_ID |
system_program |
系统程序 | SystemProgram.programId |
rent |
租金程序 | SYSVAR_RENT_PUBKEY |
clock |
时钟程序 | SYSVAR_CLOCK_PUBKEY |
register_node
将Elfo节点注册到协议中。只有注册的节点才能监控和触发支付以赚取费用。
register_node ()
参数
None
账户
名称 | 描述 | 参考文献 & 备注 |
---|---|---|
authority |
注册节点的账户(节点权限) | 签名者 |
node |
节点账户(init_if_needed) | ElfoNode.address |
node_payment_account |
用于接收USDC费用的node_payment_wallet 关联代币账户。 |
getAssociateTokenAddress |
protocol_state |
Elfo协议状态账户 | ELFO_PROTOCOL_STATE |
node_payment_wallet |
用于获取和验证node_payment_account 的钱包账户 |
|
mint |
USDC铸币账户。 | USDC Mint |
token_program |
代币程序 | TOKEN_PROGRAM_ID |
associated_token_program |
关联代币程序 | ASSOCIATED_TOKEN_PROGRAM_ID |
system_program |
系统程序 | SystemProgram.programId |
rent |
租金程序 | SYSVAR_RENT_PUBKEY |
trigger_payment
在订阅上触发支付。这是由注册的elfo节点调用的。
trigger_payment ()
参数
None
账户
名称 | 描述 | 参考文献 & 备注 |
---|---|---|
authority |
注册节点的账户(节点权限) | 签名者 |
subscriber_payment_account |
订阅者委托支付的USDC关联代币账户。 | getAssociateTokenAddress |
protocol_signer |
Elfo协议签名账户。 | ELFO_PROTOCOL_SIGNER |
subscription |
Subscription账户 | Subscription.address |
subscriber |
Subscriber账户 | Subscriber.address |
subscription_plan_payment_account |
订阅授权方的USDC关联代币账户,用于接收支付。 | getAssociateTokenAddress |
subscription_plan |
订阅计划账户。 | SubscriptionPlan.address |
node |
Node账户 | ElfoNode.address |
node_payment_account |
用于接收USDC费用的node_payment_wallet 关联代币账户。 |
getAssociateTokenAddress |
node_payment_wallet |
用于获取和验证node_payment_account 的钱包账户 |
|
mint |
USDC铸币账户。 | USDC Mint |
token_program |
代币程序 | TOKEN_PROGRAM_ID |
clock |
时钟程序 | SYSVAR_CLOCK_PUBKEY |
unsubscribe
从订阅计划中取消订阅
unsubscribe ()
参数
None
账户
名称 | 描述 | 参考文献 & 备注 |
---|---|---|
who_unsubscribes |
取消订阅计划的账户。 | 签名者 |
subscriber |
Subscriber账户 | Subscriber.address |
subscription_plan |
订阅计划账户。 | SubscriptionPlan.address |
close_subscription_plan
关闭订阅计划
close_subscription_plan ()
参数
None
账户
名称 | 描述 | 参考文献 & 备注 |
---|---|---|
authority |
最初创建订阅计划的账户 | 签名者 |
subscription_plan_author |
订阅支付授权账户。 | SubscriptionPlanAuthor.address |
subscription_plan |
订阅计划账户。 | SubscriptionPlan.address |
注意
- Elfo协议处于积极开发中,因此所有API都可能发生变化。
- Elfo协议目前仅支持USDC-SPL支付。未来这将扩展到支持任何SPL代币
- 此代码尚未经过审计。请在自己的风险下使用。
许可证
Elfo协议根据Apache 2.0许可。
除非你明确说明,否则你根据Apache-2.0许可定义的任何有意提交以包含在Anchor中的贡献,应按上述方式许可,而不附加任何其他条款或条件。
依赖项
~18–27MB
~458K SLoC