# element-js-tron

> Javascript SDK for the Element

Latest version **0.1.64** (published 2022-09-09) · 0 weekly downloads

## Install

```sh
npm install element-js-tron
pnpm add element-js-tron
yarn add element-js-tron
bun add element-js-tron
```

## Health

**Score 20/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.64 |
| Published | 2022-09-09 |
| First published | 2022-03-14 |
| Weekly downloads | 0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 13 |
| Unpacked size | 837.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Project Element Developers |
| Maintainers | luchunwei, daniel-tron |

## Links

- npm: https://www.npmjs.com/package/element-js-tron
- npm.io page: https://npm.io/package/element-js-tron

## Dependencies (13)

- [dotenv](https://npm.io/package/dotenv.md) ^16.0.0
- [graphql](https://npm.io/package/graphql.md) ^15.5.1
- [tronweb](https://npm.io/package/tronweb.md) ^4.1.0
- [crypto-js](https://npm.io/package/crypto-js.md) ^4.1.1
- [babel-jest](https://npm.io/package/babel-jest.md) ^27.5.1
- [@babel/core](https://npm.io/package/@babel/core.md) ^7.17.5
- [bignumber.js](https://npm.io/package/bignumber.js.md) ^9.0.1
- [ethereumjs-util](https://npm.io/package/ethereumjs-util.md) ^7.1.0
- [graphql-request](https://npm.io/package/graphql-request.md) ^3.5.0
- [@types/crypto-js](https://npm.io/package/@types/crypto-js.md) ^4.0.2
- [@babel/preset-env](https://npm.io/package/@babel/preset-env.md) ^7.16.11
- [isomorphic-unfetch](https://npm.io/package/isomorphic-unfetch.md) ^3.1.0
- [@babel/preset-typescript](https://npm.io/package/@babel/preset-typescript.md) ^7.16.7

## Recent versions

- 0.1.64 (latest) — 2022-09-09
- 0.1.63 — 2022-09-01
- 0.1.62 — 2022-09-01
- 0.1.61 — 2022-09-01
- 0.1.60 — 2022-08-31
- 0.1.59 — 2022-08-18
- 0.1.58 — 2022-08-05
- 0.1.57 — 2022-06-18
- 0.1.56 — 2022-06-18
- 0.1.55 — 2022-06-10
- 0.1.53 — 2022-06-10
- 0.1.52 — 2022-06-09
- 0.1.51 — 2022-05-23
- 0.1.50 — 2022-05-19
- 0.1.49 — 2022-05-11
- … 46 more at https://npm.io/package/element-js-tron/versions

## README

<!--
 * @Author: Chunwei Lu
 * @Date: 2022-02-28 19:12:53
 * @LastEditTime: 2022-04-21 15:36:26
 * @LastEditors: Chunwei Lu
 * @Description: 
 * @FilePath: /element-js/README.md
-->

SDK for APENFT marketplace base on Tron blockchain and TronLink wallet

## 开发者指南
### 目录
- 安装
- 配置
  - 配置环境变量
  - 初始化SDK

- 资产
  - 创建合集
  - 铸造NFT

- 订单
  - 创建订单
  - 接受订单
  - 取消订单
  - 查询订单

### 安装
```
npm install element-js-tron
```
sdk依赖tronlink钱包进行链上操作

在浏览器环境下直接使用TronLink注入到window.tronWeb

在node环境下使用，还需安装 tronweb, 
```
npm install tronweb
```

### 配置

#### 配置环境变量
如在node环境下使用，需要配置环境变量

1. 在项目根目录下新建.env文件，内容如下
```
# 用于操作的钱包私钥
PK_TAKER            =  xxxxx
PK_MAKER            =  xxxxx

# trongrid网络到APIKEY
TRON_PRO_API_KEY    =  xxxxx-xxxx-xxxxx-xxxxx-xxxxx
```
注意：将.env加入到.gitignore中，避免被提交

2. 安装dotenv
```
npm install dotenv
```
3. 在项目文件中引入dotenv，并配置
```js
const dotenv = require('dotenv');
dotenv.config();
```

#### 初始化SDK

```js
/* 0. 引入SDK */
import sdk from "element-js-tron";
const { ElementOrders, Network, AssetFactory, ElementSchemaName } = sdk;
/* 1. 初始化tronWeb */
/* 浏览器环境下 */
// const {tronWeb} = window;
/* node环境下,配置privateKey可以避免弹窗签名 */
const tronWeb = new TronWeb({
    fullHost: 'https://api.shasta.trongrid.io',
    privateKey: process.env.PK_MAKER,
    headers: { "TRON-PRO-API-KEY": process.env.TRON_PRO_API_KEY },
  });

/* 2. 初始化SDK */
const networkName = Network.Shasta;
const sdk_orders = new ElementOrders(tronWeb, { networkName });

/* 3. 登录，获取后续api操作所需token */
await sdk_orders.login();
// 然后就可以进行订单操作了

/* 4. 如需创建资产，可通过以下两种方法获取工厂类 */
/* 4.1 从sdk_orders中获取工厂类 */
const sdk_fab = sdk_orders.assetFactory
/* 4.2 new AssetFactory */
// const sdk_fab = new AssetFactory(tronWeb, { networkName })
/* 然后就可以 */
// sdk_fab.createAsset721(...); // 创建721资产合约
// sdk_fab.mint721(...);        // 铸造721资产
```

### 资产

#### 创建合集
sdk_fab.createAsset721(name,symbol,baseUrl,options)

方法说明
```js
/**
 * 部署ERC721合约，返回合约地址
 * @param {string} name - 合约名称
 * @param {string} symbol - 合约符号
 * @param {string} baseUrl - 合约metadata的baseUrl
 * @param {object} [options]  - 可选参数，参考 https://cn.developers.tron.network/reference/tronweb-createsmartcontract
 * @returns {Promise<{txHash,txSend}>}  Promise对象，包括交易hash和广播事件接受器，可以通过await txSend获取创建的合约地址
 */
async createAsset721(name: string, symbol: string, baseUrl: string, options?: any) 
```

方法使用示例
```js
const sdk_fab = ...
const createRes = await sdk_fab.createAsset721(
    'MyNFTSymbol',  // Symbol
    'MyNFTName',    // Name
    'https://ipfs.io/ipfs/QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/'  // metadata json url
)
const output = await createRes.txSend.catch((err) => console.log(err))
// 得到新创建的合约地址
const nftContract = output.contract_address  
```
#### 铸造NFT
sdk_fab.mint721(nftContract, toAddress,url)

方法说明
```js
/**
 * 
 * @param {string} assetAddr - NFT合约地址，指定在哪个合约中铸造NFT
 * @param {string} to - NFT token接收者地址
 * @param {string} [url] - 可选，NFT metadata的baseUrl
 * @returns Promise
 */
async mint721(assetAddr, to, url) 
```

方法使用示例
```js
const nftContract = ...
const to = ...
const url = 'https://ipfs.io/ipfs/QmPMc4tcBsMqLRuCQtPmPe84bpSjrC3Ky7t3JWuHXYB4aS/1' 
const defer = await sdk_fab.mint721(nftContract, to)
defer.txSend
    .on('confirmation', (r) => console.log('confirmation', r))
    .on('error', (r) => console.log('error', r))
await defer.txSend
```
### 订单

#### 创建订单

#### 接受订单

#### 取消订单

#### 查询订单

---
_Source: https://npm.io/package/element-js-tron · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
