# Oasys

Source: https://developers.bitgo.com/docs/oasys

## Overview

Oasys is a blockchain project specifically designed for the gaming industry, aiming to provide a highly scalable, fast, and efficient infrastructure for decentralized gaming applications (dApps). The Oasys ecosystem leverages a dual-layer architecture combining a Layer-1 hub and the Ethereum Layer-2 scaling solution to optimize performance, scalability, and transaction costs.

## Explorer

<a href="https://explorer.oasys.games/" target="_blank" rel="noreferrer">https://explorer.oasys.games/</a>

## Wallets Types

BitGo enables holding bera in the following wallet types:

|                  | Multisig Cold | Multisig Hot | MPC Cold | MPC Hot |
| :--------------- | :------------ | :----------- | :------- | :------ |
| **Custody**    | ❌            | ❌           | ✅       | ❌      |
| **Self-Custody** | ❌            | ❌           | ✅        | ✅      |

## Ticker Symbols

| Mainnet | Testnet |
| :------ | :------ |
| oas   | toas |

## Faucet

You can use a faucet to obtain free testnet Oasys for development and testing purposes.

**Faucet:** <a href="https://faucet.testnet.oasys.games/" target="_blank" rel="noreferrer">https://faucet.testnet.oasys.games/</a>

## Units

Each OAS consists of `1,000,000,000,000,000,000` (<code>10<sup>18</sup></code>) wei, so not even a single OAS can be stored numerically without exceeding the range of JavaScript numbers. Gas fees use gwei.

- 1 OAS = <code>10<sup>18</sup></code> wei
- 1 wei = <code>10<sup>-18</sup></code> OAS
- 1 gwei = <code>10<sup>-9</sup></code> OAS

For that reason, only string balance properties are available, which are `balanceString`, `confirmedBalanceString`, and `spendableBalanceString`.

## Tokens

| **Native Tokens** | **Utility** |
| :---------------- | :---------- |
| **OAS** | Native Token. OAS does not have a contract address|
| **sOAS** | Stakeable Oasys Token. sOAS tokens are <br/> - Locked and consequently non-circulating <br/> - Holders of sOAS, as well as validators, can earn rewards through staking activities|
| **WOAS** | Wrapped Oasys Token is an ERC-20 standard token designed for simplicity of token swapping |

## Fees

Due to the architecture of Oasys, the performer of the contract pays gas fees when rolling up transactions from a Verse Layer to the Hub Layer, when using a Bridge contract, or when running a contract on the Hub Layer. Verse Builder pays gas fees for rolling up, and as the Oasys ecosystem grows, the more Verse Layers and the more Transactions per Verse, the higher the gas fees. However, Oasys designs the system so that the increase in gas fees is gradual. By accelerating the growth of Verse Builder's business through the growth of the entire ecosystem, the disadvantage of rising gas fees is minimal.

## Create Wallet

```shell cURL
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="toas"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export LABEL="<DESIRED_WALLET_NAME>"
export PASSPHRASE="<YOUR_BITGO_LOGIN_PASSPHRASE>"
export ENTERPRISE_ID="<YOUR_ENTERPRISE_ID>"

curl -X POST \
 http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/generate \
 -H 'Content-Type: application/json' \
 -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "label": "'"$LABEL"'",
    "passphrase": "'"$PASSPHRASE"'",
    "enterprise": "'"$ENTERPRISE_ID"'",
    "walletVersion": 4
}'
```
```js JavaScript
bitgo
  .coin('toas')
  .wallets()
  .generateWallet({
    label: 'My Test Wallet',
    passphrase: 'secretpassphrase1a5df8380e0e30',
    enterprise: '<YOUR_ENTERPRISE_ID>',
    walletVersion: 4,
  })
  .then(function (wallet) {
    // print the new wallet
    console.dir(wallet);
  });
```

## Create Address

```shell cURL
export WALLET="<WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X POST \
-H "Authorization: Bearer $ACCESS_TOKEN" \
https://app.bitgo-test.com/api/v2/tbera/wallet/$WALLET/address

```
```js JavaScript
bitgo
  .coin('toas')
  .wallets()
  .getWallet({ id: '585c51a5df8380e0e3082e46' })
  .then(function (wallet) {
    return wallet.createAddress();
  })
  .then(function (newAddress) {
    // print new address details
    console.dir(newAddress);
  });
```

## Estimate Fee

```shell cURL
export COIN="toas"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"

curl -X GET \
 https://app.bitgo-test.com/api/v2/$COIN/tx/fee \
 -H 'Content-Type: application/json' \
 -H "Authorization: Bearer $ACCESS_TOKEN"

```
```js JavaScript
const BitGoJS = require('../../../src/index.js');
const bitgo = new BitGoJS.BitGo({ env: 'test' });
const accessToken = '<YOUR_ACCESS_TOKEN>';
const coin = 'toas';

async function getFeeEstimate() {
  try {
    await bitgo.authenticateWithAccessToken({ accessToken });
    const res = await bitgo.coin(coin).feeEstimate({ numBlocks: 2 });
    console.dir(res);
  } catch (err) {
    console.error('Error fetching fee estimate:', err);
  }
}

getFeeEstimate();

```

## Transact

Withdrawal Fee Source: Wallet Base Address

```shell cURL
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="toas"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ADDRESS="<DESTINATION_ADDRESS>"
export AMOUNT="<AMOUNT_IN_BASE_UNITS>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"

curl -X POST \
 http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/$WALLET_ID/sendcoins \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "address": "'"$ADDRESS"'",
    "amount": "'"$AMOUNT"'",
    "walletPassphrase": "'"$WALLET_PASSPHRASE"'"
}'
```
```shell cURL (send to many)
export BITGO_EXPRESS_HOST="<YOUR_LOCALHOST>"
export COIN="toas"
export WALLET_ID="<YOUR_WALLET_ID>"
export ACCESS_TOKEN="<YOUR_ACCESS_TOKEN>"
export ADDRESS_1="<DESTINATION_ADDRESS_1>"
export AMOUNT_1="<AMOUNT_1_IN_BASE_UNITS>"
export WALLET_PASSPHRASE="<YOUR_WALLET_PASSPHRASE>"

curl -X POST \
  http://$BITGO_EXPRESS_HOST/api/v2/$COIN/wallet/$WALLET_ID/sendmany \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -d '{
    "recipients": [
    {
      "address": "'"$ADDRESS_1"'",
      "amount": "'"$AMOUNT_1"'"
    }
  ],
    "walletPassphrase": "'"$WALLET_PASSPHRASE"'"
}'
```
```js JavaScript
const tx = await fundedWallet.send({
    address: `<DESTINATION_ADDRESS>`,
    amount: `<AMOUNT>`,
    walletPassphrase: process.env.PASSWORD as string,
  });
```
```js JavaScript (send to many)
let params = {
  recipients: [
    {
      amount: "<AMOUNT_1>",
      address: "<DESTINATION_ADDRESS_1>",
    }
  ],
  walletPassphrase: "<YOUR_WALLET_PASSPHRASE>",
};
wallet.sendMany(params).then(function (transaction) {
  // Print transaction details
  console.dir(transaction);
});
```

## Stake

Staking is out of scope for these chains as they don’t have native support for them.
