added support for curve params (#2271)
* added support for curve params * Run pretty:fix Co-authored-by: Jon Cinque <jon.cinque@gmail.com>
This commit is contained in:
parent
1acbb4776c
commit
672d28fe2a
|
@ -11,3 +11,4 @@ hfuzz_workspace
|
|||
**/.DS_Store
|
||||
test-ledger
|
||||
docker-target
|
||||
.idea
|
||||
|
|
|
@ -7,11 +7,16 @@ import {
|
|||
depositSingleTokenTypeExactAmountIn,
|
||||
withdrawSingleTokenTypeExactAmountOut,
|
||||
} from './token-swap-test';
|
||||
import {CurveType, Numberu64} from '../dist';
|
||||
|
||||
async function main() {
|
||||
// These test cases are designed to run sequentially and in the following order
|
||||
console.log('Run test: createTokenSwap');
|
||||
await createTokenSwap();
|
||||
console.log('Run test: createTokenSwap (constant price)');
|
||||
await createTokenSwap(CurveType.ConstantPrice, new Numberu64(1));
|
||||
console.log(
|
||||
'Run test: createTokenSwap (constant product, used further in tests)',
|
||||
);
|
||||
await createTokenSwap(CurveType.ConstantProduct);
|
||||
console.log('Run test: deposit all token types');
|
||||
await depositAllTokenTypes();
|
||||
console.log('Run test: withdraw all token types');
|
||||
|
|
|
@ -12,6 +12,7 @@ import {sendAndConfirmTransaction} from '../src/util/send-and-confirm-transactio
|
|||
import {newAccountWithLamports} from '../src/util/new-account-with-lamports';
|
||||
import {url} from '../src/util/url';
|
||||
import {sleep} from '../src/util/sleep';
|
||||
import {Numberu64} from '../dist';
|
||||
|
||||
// The following globals are created by `createTokenSwap` and used by subsequent tests
|
||||
// Token swap
|
||||
|
@ -46,9 +47,6 @@ const OWNER_WITHDRAW_FEE_DENOMINATOR = SWAP_PROGRAM_OWNER_FEE_ADDRESS ? 0 : 6;
|
|||
const HOST_FEE_NUMERATOR = 20;
|
||||
const HOST_FEE_DENOMINATOR = 100;
|
||||
|
||||
// curve type used to calculate swaps and deposits
|
||||
const CURVE_TYPE = CurveType.ConstantProduct;
|
||||
|
||||
// Initial amount in each swap token
|
||||
let currentSwapTokenA = 1000000;
|
||||
let currentSwapTokenB = 1000000;
|
||||
|
@ -88,7 +86,10 @@ async function getConnection(): Promise<Connection> {
|
|||
return connection;
|
||||
}
|
||||
|
||||
export async function createTokenSwap(): Promise<void> {
|
||||
export async function createTokenSwap(
|
||||
curveType: number,
|
||||
curveParameters?: Numberu64,
|
||||
): Promise<void> {
|
||||
const connection = await getConnection();
|
||||
const payer = await newAccountWithLamports(connection, 1000000000);
|
||||
owner = await newAccountWithLamports(connection, 1000000000);
|
||||
|
@ -169,7 +170,8 @@ export async function createTokenSwap(): Promise<void> {
|
|||
OWNER_WITHDRAW_FEE_DENOMINATOR,
|
||||
HOST_FEE_NUMERATOR,
|
||||
HOST_FEE_DENOMINATOR,
|
||||
CURVE_TYPE,
|
||||
curveType,
|
||||
curveParameters,
|
||||
);
|
||||
|
||||
console.log('loading token swap');
|
||||
|
@ -213,7 +215,7 @@ export async function createTokenSwap(): Promise<void> {
|
|||
assert(
|
||||
HOST_FEE_DENOMINATOR == fetchedTokenSwap.hostFeeDenominator.toNumber(),
|
||||
);
|
||||
assert(CURVE_TYPE == fetchedTokenSwap.curveType);
|
||||
assert(curveType == fetchedTokenSwap.curveType);
|
||||
}
|
||||
|
||||
export async function depositAllTokenTypes(): Promise<void> {
|
||||
|
|
|
@ -190,6 +190,7 @@ export class TokenSwap {
|
|||
hostFeeNumerator: number,
|
||||
hostFeeDenominator: number,
|
||||
curveType: number,
|
||||
curveParameters: Numberu64 = new Numberu64(0),
|
||||
): TransactionInstruction {
|
||||
const keys = [
|
||||
{pubkey: tokenSwapAccount.publicKey, isSigner: false, isWritable: true},
|
||||
|
@ -216,6 +217,13 @@ export class TokenSwap {
|
|||
BufferLayout.blob(32, 'curveParameters'),
|
||||
]);
|
||||
let data = Buffer.alloc(1024);
|
||||
|
||||
// package curve parameters
|
||||
// NOTE: currently assume all curves take a single parameter, u64 int
|
||||
// the remaining 24 of the 32 bytes available are filled with 0s
|
||||
let curveParamsBuffer = Buffer.alloc(32);
|
||||
curveParameters.toBuffer().copy(curveParamsBuffer);
|
||||
|
||||
{
|
||||
const encodeLength = commandDataLayout.encode(
|
||||
{
|
||||
|
@ -230,6 +238,7 @@ export class TokenSwap {
|
|||
hostFeeNumerator,
|
||||
hostFeeDenominator,
|
||||
curveType,
|
||||
curveParameters: curveParamsBuffer,
|
||||
},
|
||||
data,
|
||||
);
|
||||
|
@ -360,6 +369,7 @@ export class TokenSwap {
|
|||
hostFeeNumerator: number,
|
||||
hostFeeDenominator: number,
|
||||
curveType: number,
|
||||
curveParameters?: Numberu64,
|
||||
): Promise<TokenSwap> {
|
||||
let transaction;
|
||||
const tokenSwap = new TokenSwap(
|
||||
|
@ -421,6 +431,7 @@ export class TokenSwap {
|
|||
hostFeeNumerator,
|
||||
hostFeeDenominator,
|
||||
curveType,
|
||||
curveParameters,
|
||||
);
|
||||
|
||||
transaction.add(instruction);
|
||||
|
|
Loading…
Reference in New Issue