@neongd/neo-dapi
Version:
Neo Dapi types and toolings
916 lines (694 loc) • 26.5 kB
Markdown
# Neo dAPI
This document describes API for dApps on Neo blockchain.
When using Neo dAPI, a suitable Neo Provider is required. The definition of Neo Provider can be found [here](./docs/neo-provider.md).
This library is written in TypeScript, so all the methods and objects are typed. It is therefore usable in TypeScript projects as well as vanilla JavaScript projects.
## Getting Started
This library can be used as CommonJS/ES module or directly referenced in web page html.
### Install CommonJS/ES module
```sh
npm install @neongd/neo-dapi
```
or
```sh
yarn add @neongd/neo-dapi
```
or
```sh
pnpm add @neongd/neo-dapi
```
### Import CommonJS
```typescript
const BaseDapi = require('@neongd/neo-dapi').BaseDapi;
```
### Import ES module
```typescript
import { BaseDapi } from '@neongd/neo-dapi';
```
### Directly reference
The index.js file under the "/dist/umd" folder needs to be referenced from the page:
```html
<script src="./dist/umd/index.js"></script>
```
The use of the code is required under the global namespace of `neoDapi`.
```typescript
const Dapi = neoDapi.BaseDapi;
```
### Initialization
Create a Neo dAPI instance, assuming we already have a Neo Provider (e.g., window.neo, window.OneGate):
```typescript
const dapi = new BaseDapi(window.neo);
```
### Example
Examples of usage can be found in [test directory](./test).
## API Reference
### Table of Contents
- [Methods](#methods)
- [getProvider](#getprovider)
- [getNetworks](#getnetworks)
- [getAccount](#getaccount)
- [getBlockCount](#getblockcount)
- [getBlock](#getblock)
- [getTransaction](#gettransaction)
- [getApplicationLog](#getapplicationlog)
- [getNep17Balances](#getnep17balances)
- [invokeRead](#invokeread)
- [invokeReadMulti](#invokereadmulti)
- [invoke](#invoke)
- [invokeMulti](#invokemulti)
- [signMessage](#signmessage)
- [signMessageWithoutSalt](#signmessagewithoutsalt)
- [signTransaction](#signtransaction)
- [broadcastTransaction](#broadcasttransaction)
- [Events](#events)
- [Errors](#errors)
### Methods
#### getProvider
##### Description
Gets information about the provider, including the provider, the provider version, and the NEPs that the provider is compatible with.
##### Parameters
_(none)_
##### Returns
`Provider` - a provider object with the following properties:
- `name: string` - the provider name
- `website: string` - the provider website
- `version: string` - the provider version
- `dapiVersion: string` - the dapi version used by the provider
- `compatibility: string[]` - a list of all the NEPs supported by the provider
- `extra: object` - this object can contain any attributes specific to the provider, such as an app theme
##### Example
```typescript
/* Example */
const provider = await dapi.getProvider();
/* Example Response */
({
name: 'Awesome Wallet',
website: 'https://awesome-wallet.org',
version: '1.0.0',
dapiVersion: '1.0.0',
compatibility: ['NEP-11', 'NEP-17'],
extra: {
theme: 'Dark Mode',
currency: 'USD',
},
});
```
#### getNetworks
##### Description
Gets the networks the provider is available to connect to, along with the default network the provider is currently set to.
##### Parameters
_(none)_
##### Returns
`Networks` - a networks object with the following properties:
- `networks: string[]` - array of network names to which the provider is available to connect for the dApp developers
- `defaultNetwork: string` - the network the provider connects to by default
##### Example
```typescript
/* Example */
const networks = await dapi.getNetworks();
/* Example Response */
({
networks: ['MainNet', 'TestNet'],
defaultNetwork: 'TestNet',
});
```
#### getAccount
##### Description
Gets the account that is currently connected to the dApp.
##### Parameters
_(none)_
##### Returns
`Account` - an account object with the following properties:
- `address: string` - address of the connected account
- `publicKey: string` - public key of the connected account
- `label?: string` - a label set by user to identify their account
##### Example
```typescript
/* Example */
const account = await dapi.getAccount();
/* Example Response */
({
address: 'NXufgyw4AAST8tkLqZ5AtFKErjPzPEwnQp',
publicKey: '0267c8a9872df89d8da5bcb5ae6a30966495bbd6721d2a68d37ba2b842ea09b4c6',
label: 'My Account',
});
```
#### getBlockCount
##### Description
Gets the block count of the blockchain.
##### Parameters
`object` - an object with the following parameter:
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used
##### Returns
`number` - block count of the target network
##### Example
```typescript
/* Example */
const count = await dapi.getBlockCount({});
/* Example Response */
26537;
```
#### getBlock
##### Description
Gets information about a specific block.
##### Parameters
`object` - an object with the following members:
- `blockIndex: number` - index of the block to get information about
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used
##### Returns
`Block` - a block object (See the type definitions [here](./src/types.ts))
##### Example
```typescript
/* Example */
const block = await dapi.getBlock({ blockIndex: 26536 });
/* Example Response */
({
hash: '0xd373a9afdbe57d79ad788196aa4ef37dbfb28c7d8f22ffa1ccbc236d56268bca',
size: 5317,
version: 0,
previousBlockHash: '0x2f384bc40c608333fa9d67179d276381dea3dff33b11cfad8ae6a3b2afa15dce',
merkleRoot: '0xefd4080cb996b8d44dcc313d207a5adb7ed614488a0d636bbfe9d37d157c8e9b',
time: 1615348136186,
index: 26536,
primary: 6,
nextConsensus: 'NiY2NJTPFPyqjrGtdEhQnryJpJbxnQTvpR',
witnesses: [
{
invocation:
'DEA2ZR0uduwN/5tFVCKoHJtAnSJINfqlRDcNXnYl0H0Jcb3YBy1M0G4Z1LB3PQMIb6J4kOtFm7TBL0B6vfPuDpigDEBLHKna+SPlL9vn755blCr3vxvc2HLP5dUch0isPARVDbg24QwVuvx3mbQ6awn0cQ/h+Jym/9xFo0MR0ddKXKzCDEAIcXyoqzFq4+3N9JtyK46LLeyx9ikidPLiXg9HWQk9Ps5wx9+XIe8zziS9dRAOqT4od7tW1SA6cRU3U8ZCexJ1DECxN+nyE15RaIvwpJ0JK3/RJvAM++YKou/ljVef5atDx9pce5nkuibfZzvzrjcoJF53qnP8ZSXBKThjrN2kGCxlDEBSVfUQAFNm4j4KihACjt5Kx1A9hN8RIDQkLw7udpcFm7Nf4PtDtucw7pS7WGEkmu3c+yt2BV3KeCzNBAreypb7',
verification:
'FQwhAwIkKx3O1j4b9+sUh29+8Ca3lWf5xb6D3hlD3Rhewo5oDCECDfiFi2b/TXsKamjRHd7cx9kNKmT/os0IfExdq/QVC0AMIQIXlUMAAYR4HlRHs/D7rOZk6pK34xInyOcbxOfNr8zbjgwhAl6ElJA7k9w2nwiivX4iH1dMddlnVZHwSQfLqdruuD0QDCEDhBXQvo3BK2HT47drmPRk36t/3e50Jxw14t5iS7UQI6YMIQPJscicbi1KvWKaLbi30DrO1RilZ5O8kPSYXvftPxtIGgwhA+irUYbh3qvNEOwOUJ3tT/+t5v3fU0rD4FBiaLrj/USmF0F7zmyl',
},
],
tx: [],
confirmations: 50,
nextBlockHash: '0x568b1d99c5abd460e4a05230d2a70bc7fd432b9f372354076eacd3b9f5cd399e',
});
```
#### getTransaction
##### Description
Gets the information about a specific transaction.
##### Parameters
`object` - an object with the following properties:
- `txid: string` - transaction ID of the transaction to get information about
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used
##### Returns
`Transaction` - a transaction object (See the type definitions [here](./src/types.ts))
##### Example
```typescript
/* Example */
const count = await dapi.getTransaction({
txid: '0x7da6ae7ff9d0b7af3d32f3a2feb2aa96c2a27ef8b651f9a132cfaad6ef20724c',
});
/* Example Response */
({
hash: '0x7da6ae7ff9d0b7af3d32f3a2feb2aa96c2a27ef8b651f9a132cfaad6ef20724c',
size: 386,
version: 0,
nonce: 246876555,
sender: 'NikhQp1aAD1YFCiwknhM5LQQebj4464bCJ',
systemFee: '9999540',
networkFee: '2353160',
validUntilBlock: 5899,
signers: [
{
account: '0xebae4ab3f21765e5f604dfdd590fdf142cfb89fa',
scopes: 'None',
},
{
account: '0x86df72a6b4ab5335d506294f9ce993722253b6e2',
scopes: 'CalledByEntry',
},
],
attributes: [],
script:
'CwMA5AtUAgAAAAwU+on7LBTfD1nd3wT25WUX8rNKrusMFOK2UyJyk+mcTykG1TVTq7Smct+GFMAfDAh0cmFuc2ZlcgwUKLOtq3Jp+cIYHbPLdB6/VRkw4nBBYn1bUjk=',
witnesses: [
{
invocation:
'DEC31ZE1kiIFPan7qal/h9FYsD2LTk6Lf0m0Kbbh1GExUqTAfye7BDjyEylfR50/AVNQkr+g+jXXMHGcxF4MUYBQ',
verification: 'DCECztQyOX3cRO26AxwLw7kz8o/dlnd5LXsg5sA23aqs8eILQZVEDXg=',
},
{
invocation:
'DED8PagPv03pnEbsxUY7XgFk/qniHcha36hDCzZsmaJkpFg5vbgxk5+QE46K0GFsNpsqDJHNToGD9jeXsPzSvD5T',
verification: 'EQwhAs7UMjl93ETtugMcC8O5M/KP3ZZ3eS17IObANt2qrPHiEQtBE43vrw==',
},
],
blockHash: '0x3d87f53c51c93fc08e5ccc09dbd9e21fcfad4dbea66af454bed334824a90262c',
confirmations: 26,
blockTime: 1612687482881,
});
```
#### getApplicationLog
##### Description
Gets the application log for a given transaction.
##### Parameters
`object` - an object with the following properties:
- `txid: string` - transaction ID of the transaction to get application log for
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used
##### Returns
`ApplicationLog` - an application log object (See the type definitions [here](./src/types.ts))
##### Example
```typescript
/* Example */
const applicationLog = await dapi.getApplicationLog({
txid: '0x7da6ae7ff9d0b7af3d32f3a2feb2aa96c2a27ef8b651f9a132cfaad6ef20724c',
});
/* Example Response */
({
txid: '0x7da6ae7ff9d0b7af3d32f3a2feb2aa96c2a27ef8b651f9a132cfaad6ef20724c',
executions: [
{
trigger: 'Application',
vmState: 'HALT',
exception: null,
gasConsumed: '9999540',
stack: [],
notifications: [
{
contract: '0x70e2301955bf1e74cbb31d18c2f96972abadb328',
eventName: 'Transfer',
state: {
type: 'Array',
value: [
{
type: 'ByteString',
value: '4rZTInKT6ZxPKQbVNVOrtKZy34Y=',
},
{
type: 'ByteString',
value: '+on7LBTfD1nd3wT25WUX8rNKrus=',
},
{
type: 'Integer',
value: '10000000000',
},
],
},
},
],
},
],
});
```
#### getNep17Balances
##### Description
Gets all NEP17 asset balances in the given account.
##### Parameters
`object` - an object with the following properties:
- `address: string` - address to check the balance
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used.
##### Returns
`Nep17Balance[]` - array of the Nep17 balance object with the following properties:
- `assetHash: string` - NEP17 asset hash
- `amount: string` - Integer value of the balance, represented as a String
##### Example
```typescript
/* Example */
const balances = await dapi.getNep17Balances({
address: 'NXufgyw4AAST8tkLqZ5AtFKErjPzPEwnQp',
});
/* Example Response */
[
{
assetHash: '0xd2a4cff31913016155e38e474a2c06d08be276cf',
amount: '10000000',
},
];
```
#### invokeRead
##### Description
Executes a contract invocation in read-only mode.
##### Parameters
`object` - an object with the following properties:
- `scriptHash: string` - script hash of the smart contract to invoke
- `operation: string` - operation on the smart contract to call
- `args?: Argument[]` - any input arguments for the operation
- `signers?: Signer[]` - sender and the scope of the signature. Read more about signers [here](https://docs.neo.org/docs/en-us/basic/concept/transaction.html#signers)
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used
##### Returns
`object` - an object with the following properties:
- `script: string` - the script which was run
- `state: string` - status of the invocation
- `exception: null | string` - error message of the invocation
- `gasConsumed: string` - estimated amount of GAS to be used to execute the invocation
- `stack: Argument[]` - an array of response arguments
##### Example
```typescript
/* Example */
const result = await dapi.invokeRead({
scriptHash: '0xf61eebf573ea36593fd43aa150c055ad7906ab83',
operation: 'transfer',
args: [
{ type: 'Hash160', value: '0x86df72a6b4ab5335d506294f9ce993722253b6e2' },
{ type: 'Hash160', value: '0xebae4ab3f21765e5f604dfdd590fdf142cfb89fa' },
{ type: 'Integer', value: '10000' },
{ type: 'String', value: '' },
],
signers: [
{
account: '0x86df72a6b4ab5335d506294f9ce993722253b6e2',
scopes: 'CalledByEntry',
allowedContracts: [],
allowedGroups: [],
},
],
});
/* Example Response */
({
script:
'DAABECcMFPqJ+ywU3w9Z3d8E9uVlF/KzSq7rDBTitlMicpPpnE8pBtU1U6u0pnLfhhTAHwwIdHJhbnNmZXIMFIOrBnmtVcBQoTrUP1k26nP16x72QWJ9W1I=',
state: 'HALT',
gasConsumed: '999972',
exception: null,
stack: [
{
type: 'Boolean',
value: true,
},
],
});
```
#### invokeReadMulti
##### Description
Same as [`invokeRead`](#invokeread), but it allows to execute multiple read-only invocations in one request.
##### Parameters
`object` - an object with the following properties:
- `invocations: Invocation[]` - array of invocation object with following members:
- `scriptHash: string` - script hash of the smart contract to invoke
- `operation: string` - operation on the smart contract to call
- `args?: Argument[]` - any input arguments for the operation
- `signers?: Signer[]` - sender and the scope of the signature. Read more about signers [here](https://docs.neo.org/docs/en-us/basic/concept/transaction.html#signers)
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used
##### Returns
`object` - an object with the following properties:
- `script: string` - the script which was run
- `state: string` - status of the invocation
- `exception: null | string` - error message of the invocation
- `gasConsumed: string` - estimated amount of GAS to be used to execute the invocation
- `stack: Argument[]` - an array of response arguments
##### Example
```typescript
/* Example */
const result = await dapi.invokeReadMulti({
invocations: [
{
scriptHash: '0xf61eebf573ea36593fd43aa150c055ad7906ab83',
operation: 'transfer',
args: [
{
type: 'Hash160',
value: '0x86df72a6b4ab5335d506294f9ce993722253b6e2',
},
{
type: 'Hash160',
value: '0xebae4ab3f21765e5f604dfdd590fdf142cfb89fa',
},
{ type: 'Integer', value: '10000' },
{ type: 'String', value: '' },
],
},
],
signers: [
{
account: '0x86df72a6b4ab5335d506294f9ce993722253b6e2',
scopes: 'CalledByEntry',
allowedContracts: [],
allowedGroups: [],
},
],
});
/* Example Response */
({
script:
'DAABECcMFPqJ+ywU3w9Z3d8E9uVlF/KzSq7rDBTitlMicpPpnE8pBtU1U6u0pnLfhhTAHwwIdHJhbnNmZXIMFIOrBnmtVcBQoTrUP1k26nP16x72QWJ9W1I=',
state: 'HALT',
gasConsumed: '999972',
exception: null,
stack: [
{
type: 'Boolean',
value: true,
},
],
});
```
#### invoke
##### Description
Executes a contract invocation that requires a user's signature.
#### Parameters
`object` - an object with the following properties:
- `scriptHash: string` - script hash of the smart contract to invoke
- `operation: string` - operation on the smart contract to call
- `args?: Argument[]` - any input arguments for the operation
- `attributes?: Attribute[]` - adds attributes for the transaction
- `signers?: Signer[]` - sender and the scope of signature. Read more about signers [here](https://docs.neo.org/docs/en-us/basic/concept/transaction.html#signers)
- `network?: string` - network to submit this request to. If omitted, the default network set to the provider is used
- `extraSystemFee?: string` - this fee will be added to system fee (Integer Value represented as a String)
- `extraNetworkFee?: string` - this fee will be added to network fee (Integer Value represented as a String)
- `broadcastOverride?: boolean` - in the case that the dApp would like to be responsible for broadcasting the signed transaction rather than the provider
##### Returns
`object` - an object with the following properties:
- `txid: string` - transaction ID of the invocation
- `nodeUrl?: string` - the node which the transaction was broadcast to. Returned if transaction is broadcasted by the provider
- `signedTx?: string` - serialized signed transaction. Returned if the broadcastOverride input argument was set to true
##### Example
```typescript
/* Example */
const result = await dapi.invoke({
scriptHash: '0xf61eebf573ea36593fd43aa150c055ad7906ab83',
operation: 'transfer',
args: [
{ type: 'Hash160', value: '0x86df72a6b4ab5335d506294f9ce993722253b6e2' },
{ type: 'Hash160', value: '0xebae4ab3f21765e5f604dfdd590fdf142cfb89fa' },
{ type: 'Integer', value: '10000' },
{ type: 'String', value: '' },
],
signers: [
{
account: '0x86df72a6b4ab5335d506294f9ce993722253b6e2',
scopes: 'CalledByEntry',
allowedContracts: [],
allowedGroups: [],
},
],
});
/* Example Response */
({
txid: '0xd6e4edeb66a75b79bec526d14664017eef9ccee5650c32facb1a4d4fe3640808',
nodeUrl: 'https://n3seed2.ngd.network:10332',
});
```
#### invokeMulti
##### Description
Same as [`invoke`](#invoke), but allows to execute multiple invocations in one transaction.
##### Parameters
`object` - an object with the following properties:
- `invocations: Invocation[]` - array of invocation object with the following properties:
- `scriptHash: string` - script hash of the smart contract to invoke
- `operation: string` - operation on the smart contract to call
- `args?: Argument[]` - any input arguments for the operation
- `attributes?: Attribute[]` - adds attributes to the transaction
- `signers?: Signer[]` - sender and the scope of signature. Read more about signers [here](https://docs.neo.org/docs/en-us/basic/concept/transaction.html#signers)
- `network?: string` - network to submit this request to. If omitted, the default network set the provider is used
- `extraSystemFee?: string` - this fee will be added to system fee (Integer Value represented as a String)
- `extraNetworkFee?: string` - this fee will be added to network fee (Integer Value represented as a String)
- `broadcastOverride?: boolean` - in the case that the dApp would like to be responsible for broadcasting the signed transaction rather than the provider
##### Returns
`object` - an object with the following properties:
- `txid: string` - transaction ID of the invocations
- `nodeUrl?: string` - the node that the transaction was broadcast to. Returned if the transaction is broadcasted by the provider
- `signedTx?: string` - serialized signed transaction. Returned if the broadcastOverride input argument was set to true
##### Example
```typescript
/* Example */
const result = await dapi.invokeMulti({
invocations: [
{
scriptHash: '0xf61eebf573ea36593fd43aa150c055ad7906ab83',
operation: 'transfer',
args: [
{
type: 'Hash160',
value: '0x86df72a6b4ab5335d506294f9ce993722253b6e2',
},
{
type: 'Hash160',
value: '0xebae4ab3f21765e5f604dfdd590fdf142cfb89fa',
},
{ type: 'Integer', value: '10000' },
{ type: 'String', value: '' },
],
},
],
signers: [
{
account: '0x86df72a6b4ab5335d506294f9ce993722253b6e2',
scopes: 'CalledByEntry',
allowedContracts: [],
allowedGroups: [],
},
],
});
/* Example Response */
({
txid: '0xd6e4edeb66a75b79bec526d14664017eef9ccee5650c32facb1a4d4fe3640808',
nodeUrl: 'https://n3seed2.ngd.network:10332',
});
```
#### signMessage
##### Description
Signs a provided message with an account selected by user.
##### Parameters
`object` - an object with the following properties:
- `message: string` - the message to sign
##### Returns
`object` - an object with the following properties:
- `salt: string` - salt added to the input string before signing
- `signature: string` - signed result
- `publicKey: string` - public key of the account signed the message
##### Example
```typescript
/* Example */
const result = await dapi.signMessage({
message: 'Hello world!',
});
/* Example Response */
({
salt: 'b3085013f5edcffe089c029a98794dab',
signature:
'2953200f24dfa8730302906d752cd33f135020f84828ad4f5d39e3563161029716369fdbec7e4cc9aa03dfd2e665f4ce37f149addccc8e336fdf707a5eba4d16',
publicKey: '031fe37e66cd2d6d711bad2b2fd40fabf2acce4def456ced62fc5ba445acb6f27c',
});
```
#### signMessageWithoutSalt
##### Description
Signs a provided message with an account selected by user. This method does not add a random salt as prefix.
##### Parameters
`object` - an object with the following properties:
- `message: string` - the message to sign
##### Returns
`object` - an object with the following properties:
- `signature: string` - signed result
- `publicKey: string` - public key of the account signed the message
##### Example
```typescript
/* Example */
const result = await dapi.signMessageWithoutSalt({
message: 'Hello world!',
});
/* Example Response */
({
signature:
'2953200f24dfa8730302906d752cd33f135020f84828ad4f5d39e3563161029716369fdbec7e4cc9aa03dfd2e665f4ce37f149addccc8e336fdf707a5eba4d16',
publicKey: '031fe37e66cd2d6d711bad2b2fd40fabf2acce4def456ced62fc5ba445acb6f27c',
});
```
#### signTransaction
##### Description
Signs a provided transaction with an account selected by user.
##### Parameters
`object` - an object with the following properties:
- `version: number` - transaction version, currently 0
- `nonce: number` - random number
- `systemFee: string` - system fee paid for network resource
- `networkFee: string` - network fee paid for the validator packaging transactions
- `validUntilBlock: number` - transaction validity period
- `script: string` - script executed on the NeoVM
- `invocations?: Invocation[]` - the invocations corresponding to script. If omitted, the provider will display a warning to user, because script is not read-friendly
- `attributes?: Attribute[]` - adds attributes to the transaction
- `signers?: Signer[]` - sender and the scope of signature. Read more about signers [here](https://docs.neo.org/docs/en-us/basic/concept/transaction.html#signers)
- `network?: string` - network to submit this request to. If omitted, the default network set the provider is used
##### Returns
`object` - an object with the following properties:
- `signature: string` - signed result
- `publicKey: string` - public key of the account signed the transaction
##### Example
```typescript
/* Example */
const result = await dapi.signTransaction({
version: 0,
nonce: 2204045078,
systemFee: '2338018',
networkFee: '323456',
validUntilBlock: 1688607,
script:
'0c148b9391801e7e795f2063c356ecfd462bb0dab8000c0b646564656275672e6e656f12c01f0c0873657441646d696e0c141a89d48d89f8c1a66d3d3d0ef4832cebcea92f1541627d5b52',
signers: [
{
account: '0x69ee19eba1d8f7b43ad64aeaafb64c2939c9baad',
scopes: 'CalledByEntry',
},
{
account: '0x00b8dab02b46fdec56c363205f797e1e8091938b',
scopes: 'CalledByEntry',
},
],
attributes: [],
invocations: [
{
scriptHash: '0x152fa9ceeb2c83f40e3d3d6da6c1f8898dd4891a',
operation: 'setAdmin',
args: [
{
type: 'String',
value: 'dedebug.neo',
},
{
type: 'Hash160',
value: '0x00b8dab02b46fdec56c363205f797e1e8091938b',
},
],
},
],
});
/* Example Response */
({
signature:
'0ca24f47ec6221e283532d0f623f5f8416f638ffd4b9eaba517019933b89893f169d23cf00013443e226d6ce63d28908d5be1addf935349b340a4ff9eae73a27',
publicKey: '031fe37e66cd2d6d711bad2b2fd40fabf2acce4def456ced62fc5ba445acb6f27c',
});
```
#### broadcastTransaction
##### Description
Broadcasts a serialized signed transaction to the network.
##### Parameters
`object` - an object with the following properties:
- `signedTx: string` - the signed transaction to broadcast
- `network?: string` - network to submit this request to. If omitted, the default network set the provider is used
##### Returns
`object` - an object with the following properties:
- `txid: string` - transaction ID of the transaction
- `nodeUrl: string` - the node that the transaction was broadcast to
##### Example
```typescript
/* Example */
const result = await dapi.broadcastTransaction({
signedTx:
'AEG4RerXn0UAAAAAAIPdCwAAAAAA/tMkAAI85lDDWBenYOF3/1box7mlLLdT7AGLUH0kAMoqaP0rMEv2rQ0xrWg+hgEASgwKc0Vid2VWU3ZBcgwUi1B9JADKKmj9KzBL9q0NMa1oPoYSwB8MCG1pbnRVbml2DBS0S9Spjsr+prUeSDg9hC031DhiTkFifVtSAgAAQgxAxFTXpq6kTcPrWvzVcmaWa348mYfNYpjCk6AItQMgH1X0fGDiSbb1JX5NzWji0IHPSsFbsGyqkQOUu7iA+hFLRCgMIQMf435mzS1tcRutKy/UD6vyrM5N70Vs7WL8W6RFrLbyfEFW57Mn',
});
/* Example Response */
({
txid: '0xf1d546c55aade2f25110cfd73b063019d241c69bac289870ec514cb648a4908e',
nodeUrl: 'https://n3seed2.ngd.network:10332',
});
```
### Events
Events related functions are provided by [Neo Provider](./docs/neo-provider.md#events).
### Errors
The errors thrown by the dAPI methods have a code member and descriptive message member. The following list contains all possible error codes and associated messages:
| Code | Message | Description |
| ------ | ------------------- | -------------------------------------------------- |
| -32700 | Parse error | Invalid JSON |
| -32600 | Invalid request | JSON is not a valid request object |
| -32601 | Method not found | Method does not exist |
| -32602 | Invalid params | Invalid method parameters |
| -32603 | Internal error | Error due to faulty logic or coding in the program |
| -32000 | Network error | Underlying network error |
| -32001 | User rejected | The user rejected the request |
| -32002 | Unsupported network | The target network is not supported |
| -32003 | No account | Provider has no account |
| -32004 | Insufficient funds | Insufficient funds |
| -32005 | Remote rpc error | Error when calling remote rpc service |
## License
This project is licensed under the MIT License - see the [LICENSE](../../LICENSE) file for details.