|
@@ -19,7 +19,7 @@ mod registry {
|
|
|
}
|
|
|
|
|
|
impl Registry {
|
|
|
- pub fn new<'info>(ctx: Context<Ctor>) -> Result<Self, Error> {
|
|
|
+ pub fn new<'info>(ctx: Context<Ctor>) -> Result<Self> {
|
|
|
Ok(Registry {
|
|
|
lockup_program: *ctx.accounts.lockup_program.key,
|
|
|
})
|
|
@@ -35,7 +35,7 @@ mod registry {
|
|
|
withdrawal_timelock: i64,
|
|
|
stake_rate: u64,
|
|
|
reward_q_len: u32,
|
|
|
- ) -> Result<(), Error> {
|
|
|
+ ) -> Result<()> {
|
|
|
let registrar = &mut ctx.accounts.registrar;
|
|
|
|
|
|
registrar.authority = authority;
|
|
@@ -58,7 +58,7 @@ mod registry {
|
|
|
ctx: Context<UpdateRegistrar>,
|
|
|
new_authority: Option<Pubkey>,
|
|
|
withdrawal_timelock: Option<i64>,
|
|
|
- ) -> Result<(), Error> {
|
|
|
+ ) -> Result<()> {
|
|
|
let registrar = &mut ctx.accounts.registrar;
|
|
|
|
|
|
if let Some(new_authority) = new_authority {
|
|
@@ -73,7 +73,7 @@ mod registry {
|
|
|
}
|
|
|
|
|
|
#[access_control(CreateMember::accounts(&ctx, nonce))]
|
|
|
- pub fn create_member(ctx: Context<CreateMember>, nonce: u8) -> Result<(), Error> {
|
|
|
+ pub fn create_member(ctx: Context<CreateMember>, nonce: u8) -> Result<()> {
|
|
|
let member = &mut ctx.accounts.member;
|
|
|
member.registrar = *ctx.accounts.registrar.to_account_info().key;
|
|
|
member.beneficiary = *ctx.accounts.beneficiary.key;
|
|
@@ -83,10 +83,7 @@ mod registry {
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
- pub fn update_member(
|
|
|
- ctx: Context<UpdateMember>,
|
|
|
- metadata: Option<Pubkey>,
|
|
|
- ) -> Result<(), Error> {
|
|
|
+ pub fn update_member(ctx: Context<UpdateMember>, metadata: Option<Pubkey>) -> Result<()> {
|
|
|
let member = &mut ctx.accounts.member;
|
|
|
if let Some(m) = metadata {
|
|
|
member.metadata = m;
|
|
@@ -95,12 +92,12 @@ mod registry {
|
|
|
}
|
|
|
|
|
|
// Deposits that can only come directly from the member beneficiary.
|
|
|
- pub fn deposit(ctx: Context<Deposit>, amount: u64) -> Result<(), Error> {
|
|
|
+ pub fn deposit(ctx: Context<Deposit>, amount: u64) -> Result<()> {
|
|
|
token::transfer(ctx.accounts.into(), amount).map_err(Into::into)
|
|
|
}
|
|
|
|
|
|
// Deposits that can only come from the beneficiary's vesting accounts.
|
|
|
- pub fn deposit_locked(ctx: Context<DepositLocked>, amount: u64) -> Result<(), Error> {
|
|
|
+ pub fn deposit_locked(ctx: Context<DepositLocked>, amount: u64) -> Result<()> {
|
|
|
token::transfer(ctx.accounts.into(), amount).map_err(Into::into)
|
|
|
}
|
|
|
|
|
@@ -110,7 +107,7 @@ mod registry {
|
|
|
&ctx.accounts.balances,
|
|
|
&ctx.accounts.balances_locked,
|
|
|
))]
|
|
|
- pub fn stake(ctx: Context<Stake>, spt_amount: u64, locked: bool) -> Result<(), Error> {
|
|
|
+ pub fn stake(ctx: Context<Stake>, spt_amount: u64, locked: bool) -> Result<()> {
|
|
|
let balances = {
|
|
|
if locked {
|
|
|
&ctx.accounts.balances_locked
|
|
@@ -172,11 +169,7 @@ mod registry {
|
|
|
&ctx.accounts.balances,
|
|
|
&ctx.accounts.balances_locked,
|
|
|
))]
|
|
|
- pub fn start_unstake(
|
|
|
- ctx: Context<StartUnstake>,
|
|
|
- spt_amount: u64,
|
|
|
- locked: bool,
|
|
|
- ) -> Result<(), Error> {
|
|
|
+ pub fn start_unstake(ctx: Context<StartUnstake>, spt_amount: u64, locked: bool) -> Result<()> {
|
|
|
let balances = {
|
|
|
if locked {
|
|
|
&ctx.accounts.balances_locked
|
|
@@ -241,7 +234,7 @@ mod registry {
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
- pub fn end_unstake(ctx: Context<EndUnstake>) -> Result<(), Error> {
|
|
|
+ pub fn end_unstake(ctx: Context<EndUnstake>) -> Result<()> {
|
|
|
if ctx.accounts.pending_withdrawal.end_ts > ctx.accounts.clock.unix_timestamp {
|
|
|
return Err(ErrorCode::UnstakeTimelock.into());
|
|
|
}
|
|
@@ -289,7 +282,7 @@ mod registry {
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
- pub fn withdraw(ctx: Context<Withdraw>, amount: u64) -> Result<(), Error> {
|
|
|
+ pub fn withdraw(ctx: Context<Withdraw>, amount: u64) -> Result<()> {
|
|
|
let seeds = &[
|
|
|
ctx.accounts.registrar.to_account_info().key.as_ref(),
|
|
|
ctx.accounts.member.to_account_info().key.as_ref(),
|
|
@@ -307,7 +300,7 @@ mod registry {
|
|
|
token::transfer(cpi_ctx, amount).map_err(Into::into)
|
|
|
}
|
|
|
|
|
|
- pub fn withdraw_locked(ctx: Context<WithdrawLocked>, amount: u64) -> Result<(), Error> {
|
|
|
+ pub fn withdraw_locked(ctx: Context<WithdrawLocked>, amount: u64) -> Result<()> {
|
|
|
let seeds = &[
|
|
|
ctx.accounts.registrar.to_account_info().key.as_ref(),
|
|
|
ctx.accounts.member.to_account_info().key.as_ref(),
|
|
@@ -333,7 +326,7 @@ mod registry {
|
|
|
expiry_ts: i64,
|
|
|
expiry_receiver: Pubkey,
|
|
|
nonce: u8,
|
|
|
- ) -> Result<(), Error> {
|
|
|
+ ) -> Result<()> {
|
|
|
if total < ctx.accounts.pool_mint.supply {
|
|
|
return Err(ErrorCode::InsufficientReward.into());
|
|
|
}
|
|
@@ -370,7 +363,7 @@ mod registry {
|
|
|
}
|
|
|
|
|
|
#[access_control(reward_eligible(&ctx.accounts.cmn))]
|
|
|
- pub fn claim_reward(ctx: Context<ClaimReward>) -> Result<(), Error> {
|
|
|
+ pub fn claim_reward(ctx: Context<ClaimReward>) -> Result<()> {
|
|
|
if RewardVendorKind::Unlocked != ctx.accounts.cmn.vendor.kind {
|
|
|
return Err(ErrorCode::ExpectedUnlockedVendor.into());
|
|
|
}
|
|
@@ -413,7 +406,7 @@ mod registry {
|
|
|
pub fn claim_reward_locked<'a, 'b, 'c, 'info>(
|
|
|
ctx: Context<'a, 'b, 'c, 'info, ClaimRewardLocked<'info>>,
|
|
|
nonce: u8,
|
|
|
- ) -> Result<(), Error> {
|
|
|
+ ) -> Result<()> {
|
|
|
let (end_ts, period_count) = match ctx.accounts.cmn.vendor.kind {
|
|
|
RewardVendorKind::Unlocked => return Err(ErrorCode::ExpectedLockedVendor.into()),
|
|
|
RewardVendorKind::Locked {
|
|
@@ -467,7 +460,7 @@ mod registry {
|
|
|
Ok(())
|
|
|
}
|
|
|
|
|
|
- pub fn expire_reward(ctx: Context<ExpireReward>) -> Result<(), Error> {
|
|
|
+ pub fn expire_reward(ctx: Context<ExpireReward>) -> Result<()> {
|
|
|
if ctx.accounts.clock.unix_timestamp < ctx.accounts.vendor.expiry_ts {
|
|
|
return Err(ErrorCode::VendorNotYetExpired.into());
|
|
|
}
|
|
@@ -509,7 +502,7 @@ pub struct Initialize<'info> {
|
|
|
}
|
|
|
|
|
|
impl<'info> Initialize<'info> {
|
|
|
- fn accounts(ctx: &Context<Initialize<'info>>, nonce: u8) -> Result<(), Error> {
|
|
|
+ fn accounts(ctx: &Context<Initialize<'info>>, nonce: u8) -> Result<()> {
|
|
|
let registrar_signer = Pubkey::create_program_address(
|
|
|
&[
|
|
|
ctx.accounts.registrar.to_account_info().key.as_ref(),
|
|
@@ -563,7 +556,7 @@ pub struct CreateMember<'info> {
|
|
|
}
|
|
|
|
|
|
impl<'info> CreateMember<'info> {
|
|
|
- fn accounts(ctx: &Context<CreateMember>, nonce: u8) -> Result<(), Error> {
|
|
|
+ fn accounts(ctx: &Context<CreateMember>, nonce: u8) -> Result<()> {
|
|
|
let seeds = &[
|
|
|
ctx.accounts.registrar.to_account_info().key.as_ref(),
|
|
|
ctx.accounts.member.to_account_info().key.as_ref(),
|
|
@@ -867,7 +860,7 @@ pub struct DropReward<'info> {
|
|
|
}
|
|
|
|
|
|
impl<'info> DropReward<'info> {
|
|
|
- fn accounts(ctx: &Context<DropReward>, nonce: u8) -> Result<(), Error> {
|
|
|
+ fn accounts(ctx: &Context<DropReward>, nonce: u8) -> Result<()> {
|
|
|
let vendor_signer = Pubkey::create_program_address(
|
|
|
&[
|
|
|
ctx.accounts.registrar.to_account_info().key.as_ref(),
|
|
@@ -1054,7 +1047,7 @@ pub struct RewardQueue {
|
|
|
}
|
|
|
|
|
|
impl RewardQueue {
|
|
|
- pub fn append(&mut self, event: RewardEvent) -> Result<u32, Error> {
|
|
|
+ pub fn append(&mut self, event: RewardEvent) -> Result<u32> {
|
|
|
let cursor = self.head;
|
|
|
|
|
|
// Insert into next available slot.
|
|
@@ -1217,7 +1210,7 @@ impl<'info> From<&BalanceSandboxAccounts<'info>> for BalanceSandbox {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-fn reward_eligible(cmn: &ClaimRewardCommon) -> Result<(), Error> {
|
|
|
+fn reward_eligible(cmn: &ClaimRewardCommon) -> Result<()> {
|
|
|
let vendor = &cmn.vendor;
|
|
|
let member = &cmn.member;
|
|
|
if vendor.expired {
|
|
@@ -1239,7 +1232,7 @@ pub fn no_available_rewards<'info>(
|
|
|
member: &ProgramAccount<'info, Member>,
|
|
|
balances: &BalanceSandboxAccounts<'info>,
|
|
|
balances_locked: &BalanceSandboxAccounts<'info>,
|
|
|
-) -> Result<(), Error> {
|
|
|
+) -> Result<()> {
|
|
|
let mut cursor = member.rewards_cursor;
|
|
|
|
|
|
// If the member's cursor is less then the tail, then the ring buffer has
|