Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: improving JS package #12

Merged
merged 13 commits into from
Oct 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

*/node_modules
js/lib
js/dist

/node_modules

Expand Down
59 changes: 10 additions & 49 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,4 @@
<h1 align="center">Token vesting</h1>
<br />
<p align="center">
<img width="250" src="https://i.imgur.com/nn7LMNV.png"/>
</p>
<p align="center">
<a href="https://twitter.com/bonfida">
<img src="https://img.shields.io/twitter/url?label=Bonfida&style=social&url=https%3A%2F%2Ftwitter.com%2Fbonfida">
</a>
</p>

<h1 align="center">Token staking</h1>
<br />

<div align="center">
Expand All @@ -17,59 +7,30 @@

</div>

<br />
<h2 align="center">Table of contents</h2>
<br />

1. [Program ID](#program-id)
2. [Audit](#audit)
3. [UI](#ui)
4. [Overview](#overview)
5. [Structure](#structure)

<br />
<a name="program-id"></a>
<h2 align="center">Program ID</h2>
<br />

- mainnet: `CChTq6PthWU82YZkbveA3WDf7s97BWhBK4Vx9bmsT743`
- devnet: `DLxB9dSQtA4WJ49hWFhxqiQkD9v6m67Yfk9voxpxrBs4`
- mainnet: `---TBD---`
- devnet: `3F15CLnQjHqMCHLn2g7vuDULiRuJDiEMSZQXMoVVUGtA`

<br />
<a name="audit"></a>
<h2 align="center">Audit</h2>
<br />

This code has been audited by Kudelski
This code has been audited ✅

- Audit report: [Bonfida Token Vesting Report](/audit/Bonfida_SecurityAssessment_Vesting_Final050521.pdf)

<br />
<a name="ui"></a>
<h2 align="center">UI</h2>
<br />

The [Bonfida Token Vesting UI](https://vesting.bonfida.org) can be used to unlock tokens. The UI **only** works for vesting accounts using the mainnet deployment `CChTq6PthWU82YZkbveA3WDf7s97BWhBK4Vx9bmsT743`
- Forked codebase by Kudelski: [Bonfida Token Vesting Report](/audit/Bonfida_SecurityAssessment_Vesting_Final050521.pdf)
- Modified codebase: `---TBD---`

<br />
<a name="overview"></a>
<h2 align="center">Overview</h2>
<br />

- Simple vesting contract (SVC) that allows you to deposit X SPL tokens that are unlocked to a specified public key at a certain block height/ slot.
- Unlocking works by pushing a permissionless crank on the contract that moves the tokens to the pre-specified address
- Token Address should be derived from https://spl.solana.com/associated-token-account
- 'Vesting Schedule contract' - A contract containing an array of the SVC's that can be used to develop arbitrary- vesting schedules.
- Tooling to easily setup vesting schedule contracts
- Recipient address should be modifiable by the owner of the current recipient key
- Implementation should be a rust spl compatible program, plus client side javascript bindings that include a CLI- interface. Rust program should be unit tested and fuzzed.

<br />
<a name="structure"></a>
<h2 align="center">Structure</h2>
<br />

- `js` : JavaScript binding to interact with on-chain token vesting contract
- `program` : The BPF compatible token vesting on-chain program/smart contract

![diagram](assets/structure.png)
- The codebase is a modified fork of the Bonfida Token Vesting program, into a Staking program.
- The staking contract allows you to deposit X SPL tokens that will get unlocked at a certain block height/slot.
- Allows a pre-defined list of possible time periods for staking: 0 for "unlocked", 3 mth, 6, 9, 12.
- On "unlocked" stakes, there is a 7 day withdrawal period since the user initializes the withdrawal.
1 change: 0 additions & 1 deletion js/.eslintignore

This file was deleted.

56 changes: 0 additions & 56 deletions js/.eslintrc.js

This file was deleted.

1 change: 0 additions & 1 deletion js/.prettierrc.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
arrowParens: 'avoid'
bracketSpacing: true
jsxBracketSameLine: false
semi: true
singleQuote: true
tabWidth: 2
Expand Down
4 changes: 0 additions & 4 deletions js/dist/index.d.ts

This file was deleted.

1 change: 0 additions & 1 deletion js/dist/index.js

This file was deleted.

11 changes: 0 additions & 11 deletions js/dist/instructions.d.ts

This file was deleted.

46 changes: 0 additions & 46 deletions js/dist/main.d.ts

This file was deleted.

24 changes: 0 additions & 24 deletions js/dist/state.d.ts

This file was deleted.

23 changes: 0 additions & 23 deletions js/dist/utils.d.ts

This file was deleted.

69 changes: 69 additions & 0 deletions js/eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import { fixupConfigRules } from '@eslint/compat';
import globals from 'globals';
import babelParser from '@babel/eslint-parser';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import js from '@eslint/js';
import { FlatCompat } from '@eslint/eslintrc';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});

export default [{
ignores: ['lib', 'dist'],
}, ...fixupConfigRules(
compat.extends('eslint:recommended', 'plugin:import/errors', 'plugin:import/warnings'),
), {
languageOptions: {
globals: {
...globals.browser,
...globals.node,
},
parser: babelParser,
parserOptions: {
requireConfigFile: false,
},
ecmaVersion: 8,
sourceType: 'module',
},

settings: {
react: {
version: 'detect',
},
},

rules: {
'no-trailing-spaces': ['error'],
'import/first': ['error'],
'import/no-commonjs': ['error'],
'import/namespace': ['warn'],
'import/default': ['warn'],

'import/order': ['error', {
groups: [['internal', 'external', 'builtin'], ['index', 'sibling', 'parent']],
'newlines-between': 'always',
}],

indent: ['error', 2, {
MemberExpression: 1,
SwitchCase: 1,
}],

'linebreak-style': ['error', 'unix'],
'no-console': [0],

quotes: ['error', 'single', {
avoidEscape: true,
allowTemplateLiterals: true,
}],

'require-await': ['error'],
semi: ['error', 'always'],
},
}];
Loading
Loading