New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

doubleup

Package Overview
Dependencies
Maintainers
5
Versions
196
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

doubleup

SDK to integrate with doubleup contracts

latest
npmnpm
Version
5.4.5
Version published
Weekly downloads
41
Maintainers
5
Weekly downloads
 
Created
Source

DoubleUp SDK

Installation

$ npm install doubleup

Initialization

JS

import { DoubleUpClient } from 'doubleup';

const suiClient = new SuiClient({ url: getFullnodeUrl("mainnet") });

...
export const dbClient = new DoubleUpClient({
    partnerNftListId: "0x0",
    suiClient: provider,
});

React

import { DoubleUpProvider } from 'doubleup';

// or use suiClient from @mysten provider
const suiClient = new SuiClient({ url: getFullnodeUrl("mainnet") });

## Basic Usage

JS

```js
import { Transaction } from "@mysten/sui/transactions";

const txb = new Transaction();
const coinType = "0x2::sui::SUI";
txb.setSender(address);

const betTypes = [0]; // 0 for heads, 1 for tails
const coin = txb.splitCoins(txb.gas, [1_000_000])

dbClient.createCoinflip({
    betTypes,
    coin,
    coinType,
    transaction: txb,
});


// Then just call sign and execute on the txb that is generated

Partner NFTs

The following games are enabled for a reduced house edge for holders of selected NFT projects:

  • Range Dice
  • Rock, Paper, Scissors

When initializing the client, include the partnerNftListId option or prop.

Then, include partnerNftId in the call to the game. For example:

const dbClient = new DoubleUpClient({
    client: suiClient,
    partnerNftListId: "" // <<<<<<<<<<
});
...

const { ok: gameOk, err: gameErr, gameSeed } = createRangeDice({
    betType,
    coin,
    coinType,
    partnerNftId, // <<<<<<<<<<<<
    range,
    transaction: txb
});

If the player does not own the NFT passed in, then the call to the contract will fail.

Games

Coinflip

betType

ValueMeaning
0Heads
1Tails

pollInterval (optional, default: 3000)

milliseconds

import { Transaction } from "@mysten/sui/transactions";

const txb = new Transaction();
const coinType = "0x2::sui::SUI";

const betTypes = [0]; // 0 for heads, 1 for tails
const coin = txb.splitCoins(txb.gas, [1_000_000])

dbClient.createCoinflip({
    betTypes,
    coin,
    coinType,
    transaction: txb,
});


// Then just call sign and execute on the txb that is generated

Dice

NOTE: NOT CURRENTLY IMPLEMENTED

betType

ValueMeaning
0 - 5Dice Rolls
6Odd
7Even
8Small
9Big

pollInterval (optional, default: 3000)

milliseconds

const betType = 0;

const [coin] = txb.splitCoins(
    txb.gas,
    txb.pure.u64(betAmount)
);

const coinType = "0x2::sui::SUI";

const { ok: gameOk, err: gameErr, gameSeed } = createDice({
    betType,
    coin,
    coinType,
    transaction: txb
});

const transactionResult = await signAndExecuteTransactionBlock({ ... });

const { ok: resultOk, err: resultErr, results } = await getDiceResult({
    ???
});

Limbo

multiplier

1.01 - 100

pollInterval (optional, default: 3000)

milliseconds

const [coin] = txb.splitCoins(
    txb.gas,
    txb.pure.u64(betAmount)
);

const coinType = "0x2::sui::SUI";

const { ok: gameOk, err: gameErr, gameSeed } = createLimbo({
    coin,
    coinType,
    multiplier: 50,
    transaction: txb
});

const transactionResult = await signAndExecuteTransactionBlock({ ... });

const { ok: resultOk, err: resultErr, results } = await getLimboResult({
    coinType,
    gameSeed,
    transactionResult
});

Lottery

Buy Ticket

const address = '0x...';

const [coin] = txb.splitCoins(
    txb.gas,
    txb.pure(lottery.ticket_cost, "u64")
);

const tickets = [{
    numbers: [27, 15, 30, 7, 11],
    specialNumber: 2
}];

 const { ok, err } = buyLotteryTickets({
    address,
    coin,
    tickets,
    transaction: txb
});

Get Lottery

const { ok, err, result } = await getLottery();

Get Lottery History

const { ok, err, results } = await getLotteryHistory();

Get Lottery Result

const { ok, err, result } = await getLotteryDrawingResult({
    round: 8679412
});

Get Lottery Tickets

const { ok, err, results } = await getLotteryTickets({
    address: '0x...'
});

Redeem Lottery Tickets

const ticketIds = [
    '0x...',
    '0x...'
];

const { ok, err, results } = await redeemLotteryTickets({
    ticketIds
});

Plinko

numberOfDiscs

1 - 100

plinkoType

ValueMeaning
06 Rows
19 Rows
212 Rows

pollInterval (optional, default: 3000)

milliseconds

const [coin] = txb.splitCoins(
    txb.gas,
    txb.pure(betAmount * numberOfDiscs, "u64")
);

const coinType = "0x2::sui::SUI";

const { ok: gameOk, err: gameErr, gameSeed } = createPlinko({
    betAmount,
    coin,
    coinType,
    numberOfDiscs: 50,
    plinkoType: 1,
    transaction: txb
});

const transactionResult = await signAndExecuteTransactionBlock({ ... });

const { ok: resultOk, err: resultErr, results } = await getPlinkoResult({
    coinType,
    gameSeed,
    transactionResult
});

Range Dice

** If over/under, range must be a number. ** ** If inside/outside, range must be an array of two numbers. **

range

1 - 100

OR

[1 - 100, 1 - 100]

betType

ValueMeaning
0Over
1Under
2Inside
3Outside

pollInterval (optional, default: 3000)

milliseconds

const [coin] = txb.splitCoins(
    txb.gas,
    txb.pure(betAmount * numberOfDiscs, "u64")
);

const coinType = "0x2::sui::SUI";

// EXAMPLE: over
const betType = 0;
const range = 25;

// EXAMPLE: inside
const betType = 2;
const range = [25, 50];

const { ok: gameOk, err: gameErr, gameSeed } = createRangeDice({
    betType,
    coin,
    coinType,
    range,
    transaction: txb
});

const transactionResult = await signAndExecuteTransactionBlock({ ... });

const { ok: resultOk, err: resultErr, results } = await getRangeDiceResult({
    betType,
    coinType,
    gameSeed,
    transactionResult
});

Roulette

Create Table

const coinType = "0x2::sui::SUI";

const { ok, err } = createRouletteTable({
    coinType,
    transaction: txb
});

Table Existence

const address = "0x...";
const coinType = "0x2::sui::SUI";

const { ok, err, tableExists } = await doesRouletteTableExist({
    address,
    coinType
});

Add Bet to Table

betType

ValueMeaning
0Red
1Black
2Number
3Even
4Odd
51st 12 (1 - 12)
62nd 12 (13 - 24)
73rd 12 (25 - 36)
81st 18 (1 - 18)
92nd 18 (19 - 36)
101st Row (1, 4, 7, ...)
112nd Row (2, 5, 8, ...)
123rd Row (3, 6, 9, ...)
const coinType = "0x2::sui::SUI";
const tableOwner = "0x...";

const [coin] = txb.splitCoins(
    txb.gas,
    txb.pure.u64(betAmount)
);

// red
const betType = 0;

const { ok, err, betId } = addRouletteBet({
    address: tableOwner,
    betType,
    coin,
    coinType,
    transaction: txb
});

// bet on 15
const betType = 2;
const betNumber = 15;

const { ok, err, betId } = addRouletteBet({
    address: tableOwner,
    betNumber,
    betType,
    coin,
    coinType,
    transaction: txb
});

Remove Bet from Table

const coinType = "0x2::sui::SUI";

const self = "0x...";
const tableOwner = "0x...";

const { ok, err, results } = await removeRouletteBet({
    betId,
    coinType,
    player: self,
    tableOwner,
    transaction
});

Start Roll on your Table

const coinType = "0x2::sui::SUI";

const { ok: startOk, err: startErr, gameSeed } = startRoulette({
    coinType,
    transaction: txb
});

const transactionResult = await signAndExecuteTransactionBlock({ ... });

// Get the current round number of the object
const { roundNumber } = await doesRouletteTableExist({
    address,
    coinType: SUI_COIN_TYPE
});

const { ok: resultOk, err: resultErr, results } = await getRouletteResult({
    coinType,
    gameSeed,
    transactionResult,
    roundNumber
});

FAQs

Package last updated on 22 Oct 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts