1 个不稳定版本

0.1.0 2022年3月15日

#12 in #elfo

Apache-2.0

35KB
812

Elfo Protocol

Solana上的订阅支付协议

Tutorials Discord Chat License

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