0.0.8 • Published 4 months ago

@remitano-anhdt/celeb-duel-sdk v0.0.8

Weekly downloads
-
License
ISC
Repository
github
Last release
4 months ago

celeb-duel-sdk

How to use

1. Check user can vote

import {
  PublicKey,
  Connection,
  Keypair,
  Commitment,
} from "@solana/web3.js";
import { AnchorProvider, Wallet } from "@project-serum/anchor";
import { Context, DuelClient, CELEB_DUEL_PROGRAM_ID, DUEL_CONFIG_ACCOUNT } from "@renec-foundation/celeb-duel-sdk";


...

// yourKey = Keypair.fromSecretKey(Uint8Array.from([124, 149, 222, 31, 236, 142, 29, 95...]));

const commitment: Commitment = "confirmed";
const connection = new Connection(const.RPC_ENDPOINT_URL, { commitment });
const wallet = new Wallet(yourKey);
const provider = new AnchorProvider(connection, wallet, { commitment });

const ctx = Context.withProvider(provider, new PublicKey(CELEB_DUEL_PROGRAM_ID));

const duelClient = await DuelClient.getClient(ctx, new PublicKey(DUEL_CONFIG_ACCOUNT));

const canVote = await duelClient.canVote(duelId, user.publicKey);
console.log(`User can vote now?: ${canVote}`)

2. Vote One

import {
  PublicKey,
  Connection,
  Keypair,
  Commitment,
} from "@solana/web3.js";
import { AnchorProvider, Wallet } from "@project-serum/anchor";
import { Context, DuelClient, CELEB_DUEL_PROGRAM_ID, DUEL_CONFIG_ACCOUNT } from "@renec-foundation/celeb-duel-sdk";


...

// yourKey = Keypair.fromSecretKey(Uint8Array.from([124, 149, 222, 31, 236, 142, 29, 95...]));

const commitment: Commitment = "confirmed";
const connection = new Connection(const.RPC_ENDPOINT_URL, { commitment });
const wallet = new Wallet(yourKey);
const provider = new AnchorProvider(connection, wallet, { commitment });

const ctx = Context.withProvider(provider, new PublicKey(CELEB_DUEL_PROGRAM_ID));

const duelClient = await DuelClient.getClient(ctx, new PublicKey(DUEL_CONFIG_ACCOUNT));

// client.buildVoteOneIx(duelId, user, feePayer)
const instructions = [await client.buildVoteOneIx(duelId, user.publicKey, user.publicKey)];
const transaction = new Transaction().add(...instructions);
transaction.recentBlockhash = (
  await connection.getLatestBlockhash("processed")
).blockhash;
transaction.feePayer = user.publicKey;

const recoverTx = Transaction.from(
  transaction.serialize({ requireAllSignatures: false })
);

// Fee Payer Sign
// recoverTx.partialSign(user); ----> user already sign below, uncomment if the feePayer is GasLess service
let signedTx = await userWallet.signTransaction(recoverTx);
await connection.sendRawTransaction(signedTx.serialize());


const userVoteData = await duelClient.getUserByUserPublicKey(user.publicKey);
console.log("userVoteData", userVoteData);

3. Vote Two

import {
  PublicKey,
  Connection,
  Keypair,
  Commitment,
} from "@solana/web3.js";
import { AnchorProvider, Wallet } from "@project-serum/anchor";
import { Context, DuelClient, CELEB_DUEL_PROGRAM_ID, DUEL_CONFIG_ACCOUNT } from "@renec-foundation/celeb-duel-sdk";


...
// yourKey = Keypair.fromSecretKey(Uint8Array.from([124, 149, 222, 31, 236, 142, 29, 95...]));

const commitment: Commitment = "confirmed";
const connection = new Connection(const.RPC_ENDPOINT_URL, { commitment });
const wallet = new Wallet(yourKey);
const provider = new AnchorProvider(connection, wallet, { commitment });

// Build and sign transaction in BE, then encode to send to FE
const ctx = Context.withProvider(provider, new PublicKey(CELEB_DUEL_PROGRAM_ID));

const duelClient = await DuelClient.getClient(ctx, new PublicKey(DUEL_CONFIG_ACCOUNT));

// client.buildVoteTwoIx(duelId, user, feePayer)
const instructions = [await client.buildVoteTwoIx(duelId, user.publicKey, user.publicKey)];
const transaction = new Transaction().add(...instructions);
transaction.recentBlockhash = (
  await connection.getLatestBlockhash("processed")
).blockhash;
transaction.feePayer = user.publicKey;

const recoverTx = Transaction.from(
  transaction.serialize({ requireAllSignatures: false })
);

// Fee Payer Sign
// recoverTx.partialSign(user); ----> user already sign below, uncomment if the feePayer is GasLess service
let signedTx = await userWallet.signTransaction(recoverTx);
await connection.sendRawTransaction(signedTx.serialize());


const userVoteData = await duelClient.getUserByUserPublicKey(user.publicKey);
console.log("userVoteData", userVoteData);

4. Announce Winner

import {
  PublicKey,
  Connection,
  Keypair,
  Commitment,
} from "@solana/web3.js";
import { AnchorProvider, Wallet } from "@project-serum/anchor";
import { Context, DuelClient, CELEB_DUEL_PROGRAM_ID, DuelResult } from "@renec-foundation/celeb-duel-sdk";
import { getOrCreateAssociatedTokenAccount } from "@solana/spl-token";


...
// yourKey = Keypair.fromSecretKey(Uint8Array.from([124, 149, 222, 31, 236, 142, 29, 95...]));

const commitment: Commitment = "confirmed";
const connection = new Connection(const.RPC_ENDPOINT_URL, { commitment });
const wallet = new Wallet(yourKey);
const provider = new AnchorProvider(connection, wallet, { commitment });

const ctx = Context.withProvider(provider, new PublicKey(CELEB_DUEL_PROGRAM_ID));

const duelClient = await DuelClient.getClient(ctx);

const duelInfo = await DuelClient.getDuelById(duelId);

const adminTokenOneAccount = await getOrCreateAssociatedTokenAccount(
    connection,
    yourKey,
    duelInfo.tokenOne,
    yourKey.publicKey
);
const adminTokenTwoAccount = await getOrCreateAssociatedTokenAccount(
    connection,
    yourKey,
    duelInfo.tokenTwo,
    yourKey.publicKey
);

const duelResult = await duelClient.getDuelResult(duelId);
let adminTokenAccount;

switch (duelResult) {
  case DuelResult.OneWin:
    adminTokenAccount = adminTokenOneAccount;
    break;
  case DuelResult.OneWin:
    adminTokenAccount = adminTokenTwoAccount;
    break;
  case DuelResult.Tie:
    throw Error("Tie");
};
const tx = await duelClient.announceWinner(
  duelId,
  adminTokenAccount,
);
const txSignature = await tx.buildAndExecute();
0.0.8

4 months ago

0.0.7

7 months ago

0.0.6

10 months ago

0.0.5

10 months ago

0.0.4

10 months ago

0.0.3

10 months ago

0.0.2

10 months ago

0.0.1

10 months ago