# Vault Management

With Vault Management SDK, developers can use a library to manipulate and control Jasper vaults. They can perform actions such as initializing a vault, transferring an asset, or checking the vault's balance.

### Function List

* To initialize a new Jasper vault:

<table data-full-width="false"><thead><tr><th>Method</th><th width="231.66666666666669">Parameter Type</th><th>Error Message</th></tr></thead><tbody><tr><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">initNewVault(type: number)
</code></pre></td><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript"><strong>number: number;
</strong></code></pre></td><td><pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript">'Error creating vault'
</code></pre></td></tr></tbody></table>

* To transfer the asset between the wallet and the vault:
  * Input two addresses (either wallet or vault), asset choices and an amount of asset to transfer.
  * **If from == user's wallet address:**\
    Issue the asset from user's wallet to the vault
  * **If to == user's wallet address:**\
    Redeem the asset from the vault to the user's wallet

<table><thead><tr><th>Method</th><th>Parameter Type</th><th>Error Message</th></tr></thead><tbody><tr><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">transfer(from: Address, to: Address, asset: Address[], amount: BigNumber[])
</code></pre></td><td><pre class="language-javascript"><code class="lang-javascript"><strong>Address: string;
</strong>Address[]: string[];
BigNumber[]: bignumber[];
</code></pre></td><td><pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript">'Error transfering vault'
</code></pre></td></tr></tbody></table>

* To get vault address under the specific wallet
  * Input a wallet address to get a vault address under the wallet as a return

<table><thead><tr><th>Method</th><th>Parameter Type</th><th>Error Message</th></tr></thead><tbody><tr><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">getWalletToVault(wallet: Address)
</code></pre></td><td><pre class="language-javascript"><code class="lang-javascript"><strong>Address: string;
</strong></code></pre></td><td><pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript"><strong>'Error initializing extensions'
</strong></code></pre></td></tr></tbody></table>

* To get salt number under the specific vault

  * Input a vault address to get a salt number (ERC-4337 type)

  <table><thead><tr><th>Method</th><th>Parameter Type</th><th>Error Message</th></tr></thead><tbody><tr><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">getVaultToSalt(vault: Address)
  </code></pre></td><td><pre class="language-javascript"><code class="lang-javascript"><strong>Address: string;
  </strong></code></pre></td><td><pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript"><strong>'Error getting vault to salt'
  </strong></code></pre></td></tr></tbody></table>
* To get address under the specific wallet and salt number

  * Input the wallet address and salt to get the address

  <table><thead><tr><th>Method</th><th>Parameter Type</th><th>Error Message</th></tr></thead><tbody><tr><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">getAddress(wallet: Address, salt: number)
  </code></pre></td><td><pre class="language-javascript"><code class="lang-javascript"><strong>Address: string;
  </strong><strong>number: number;
  </strong></code></pre></td><td><pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript"><strong>'Error getting address'
  </strong></code></pre></td></tr></tbody></table>
* To create a new account for vault

  * Input a wallet address and salt to create a new account

  <table><thead><tr><th>Method</th><th>Parameter Type</th><th>Error Message</th></tr></thead><tbody><tr><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">createAccount(wallet: Address, salt: number)
  </code></pre></td><td><pre class="language-javascript"><code class="lang-javascript"><strong>Address: string;
  </strong><strong>number: number;
  </strong></code></pre></td><td><pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript"><strong>'Error creating account'
  </strong></code></pre></td></tr></tbody></table>
* To manage option writer setting

  * Input a vault address and details to edit option writer settings

  <table><thead><tr><th>Method</th><th>Parameter Type</th><th>Error Message</th></tr></thead><tbody><tr><td><pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">setOptionWriterSettings(vault_addr: Address, settings: IOptionFacet.ManagedOptionsSettingsStruct)
  </code></pre></td><td><pre class="language-javascript"><code class="lang-javascript"><strong>Address: string;
  </strong><strong>IOptionFacet.ManagedOptionsSettingsStruct:
  </strong>(
  bool isOpen;
  IOptionFacet.OrderType orderType;
  address writer;
  address lockAsset;
  address underlyingAsset;
  IOptionFacet.UnderlyingAssetType lockAssetType;
  uint256 underlyingNftID;
  IOptionFacet.LiquidateMode liquidateMode;
  address strikeAsset;
  uint256 maximum;
  PremiumOracleType  premiumOracleType;
  address[] premiumAssets;
  uint64[]   productTypes;    // 1h=3600 2h=7200
  uint256[]  premiumFloorUSDs;// 10u 15u
  uint256[]  premiumRates; // 1.1 ether 0.9 ether
  ) 
  </code></pre></td><td><pre class="language-typescript" data-overflow="wrap"><code class="lang-typescript"><strong>'Error setOptionWriterSettings'
  </strong></code></pre></td></tr></tbody></table>
