npm.io
1.1.7 • Published 3 years ago

msafe-iframe

Licence
MIT
Version
1.1.7
Deps
2
Size
309 kB
Vulns
0
Weekly
0

Msafe Iframe SDK

Msafe Iframe SDK is used to integrate any dapp into msafe multi-sign wallet.
The frontend of dapp will run in a sub-iframe of msafe, this SDK can be used for the interaction between dapp and msafe wallet.

Install

Installation of the npm package:

> npm install --save msafe-iframe

Usage(Dapp Side)

Init msafe wallet

You should initialize it once and use it later.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
Connect/Disconnect to a msafe account

Connect/Disconnect to an account.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const account = await msafe.connect(); // {addres:string, publicKey:string}
await msafe.isConnected(); // true
await msafe.disconnect();
await msafe.isConnected(); // false
Get Network

Get current network.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const network:string = await msafe.network(); // mainnet
Get Account

Get current msafe account.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const account:Account = await msafe.account();
console.log("address:", account.address);
console.log("public key:", account.publicKey);
Get ChainId

Get current ChainId.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const account = await msafe.chainId();  // 1
Submit Transaction

Request a signature and send a transaction to the blockchain.

  • payload - mandatory parameter containing the transaction body.
  • option - optional parameter that overrides transaction parameters.
  • For arguments of type vector, you can pass in an array.
  • For vector<u8>, you can pass in Uint8Array.
  • You can also pass in a BCS serialized transaction as payload(Uint8Array), which ignores option.
import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const payload = {
    function: "0x1::coin::transfer",
    type_arguments: ["0x1::aptos_coin::AptosCoin"],
    arguments: ["0x997b38d2127711011462bc42e788a537eae77806404769188f20d3dc46d72750", 50]
};
const option = {
   sender: account.address,
   sequence_number: "1",
   max_gas_amount: "4000",
   gas_unit_price: "1",
   // Unix timestamp, in seconds + 10 seconds
   expiration_timestamp_secs: (Math.floor(Date.now() / 1000) + 10).toString(),
}
const txid:Uint8Array = await msafe.signAndSubmit(payload, option); // 32 bytes tx hash
Sign Transaction

Request a signature of transaction.

  • payload - mandatory parameter containing the transaction body.
  • option - optional parameter that overrides transaction parameters.
  • For arguments of type vector, you can pass in an array.
  • For vector<u8>, you can pass in Uint8Array.
  • You can also pass in a BCS serialized transaction as payload(Uint8Array), which ignores option.
import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
const payload = {
    function: "0x1::coin::transfer",
    type_arguments: ["0x1::aptos_coin::AptosCoin"],
    arguments: ["0x997b38d2127711011462bc42e788a537eae77806404769188f20d3dc46d72750", 50]
};
const option = {
   sender: msafeAddress.hex(),
   sequence_number: "1",
   max_gas_amount: "4000",
   gas_unit_price: "1",
   // Unix timestamp, in seconds + 10 seconds
   expiration_timestamp_secs: (Math.floor(Date.now() / 1000) + 10).toString(),
}
const signedTxn:Uint8Array = await msafe.signTransaction(payload, option); // BCS serialized signed transaction
Sign Message

Unsupported now.

Network Change Event

Network change event.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
msafe.onChangeAccount((network:string)=>{
    console.log("network change to:", network)
});
Account Change Event

Account change event.

import { MsafeWallet } from "msafe-iframe";
const msafe = await MsafeWallet.new();
msafe.onChangeAccount((account:Account)=>{
    console.log("address:", account.address);
    console.log("public key:", account.publicKey);
});

Usage(Msafe Server Side)

Accept dapp connection
import { Connector,MsafeServer } from "msafe-iframe";
// cleaner is a function that used to remove listener.
const cleaner = Connector.accepts(dappUrl, (connector:Connector) => {

})
Create Msafe Wallet Service
import { Connector,MsafeServer,WalletAPI } from "msafe-iframe";
const connector:Connector = await Connector.accept(dappUrl);
const server = new MsafeServer(connector, {
    async connect(): Promise<Account> {
        // ...
        return {address:'0x1', publicKey:'0x1234...'};
    },
    // ... signAndSubmit(),signTransaction()
    async signMessage(
        message: string | Uint8Array
    ): Promise<Uint8Array> {
        throw Error("unsupport");
    },
} as WalletAPI);
Emit Network Change Event
import { Connector,MsafeServer,WalletAPI } from "msafe-iframe";
const server = new MsafeServer(...);
await server.changeNetwork('Testnet');
Emit Account Change Event
import { Connector,MsafeServer,WalletAPI } from "msafe-iframe";
const server = new MsafeServer(...);
await server.changeAccount({address:'0x1234...', publicKey:'0xabce...'});

Development

# Install dependencies
> npm install

# Build
> npm run build

# Test
> npm run test

# Publish
> npm publish

Keywords