@ixily/activ
v4.10.23
Published
Alpha Capture Trade Idea Verification. Blockchain ownership proven trade ideas and strategies.
Downloads
588
Readme
Table of Contents
- Installation
- Creating Investment Ideas
- Adjusting Investment Ideas
- Closing Investment Ideas
- Retrieving Investment Ideas
- Retrieving Investment Strategies
- Provider Authorization (for enabling Copy Trade)
- Additional Methods
- BRA Methods
- License
Installation
Installation:
IMPORTANT: Install node v18.x.x
npm i @ixily/activ
External packages to use activ correctly:
npm i @lit-protocol/[email protected]
npm i [email protected]
npm i [email protected]
Examples:
Go here to see and clone basic examples using activ: https://github.com/IXily
Basic initialization example:
You can install
import {
LitNodeProviderModule,
CacheNodeStorageModule as CacheStorageModule,
v4,
} from '@ixily/activ'
const {
ActivV4Module,
} = v4
const activ = ActivV4Module;
//@ts-ignore
import * as LitJsSdk from '@lit-protocol/lit-node-client-nodejs'
//@ts-ignore
import * as Siwe from "siwe";
//@ts-ignore
import * as Jimp from 'jimp';
const PRIVATE_KEY = 'your_private_wallet_key';
// create the app here: https://nft.storage
const nftStorageKey = 'your_nft_storage_key';
const POLYGON_CONFIG: v4.IActivConfig = {
defaultBlockchainNetwork: 'polygon',
defaultContract: 'v4',
defaultContractOptions: {
userWalletPrivateKey: PRIVATE_KEY,
},
litConfig: {
litProvider: LitNodeProviderModule,
mock: false,
},
nftStorageKey,
mockNftStorage: false,
skipPricingSignature: false,
ipfsProxyEnabled: true,
showLogsToDebug: true,
cacheStorageConfig: {
isBrowser: false,
module: CacheStorageModule,
dbParams: {
provider: 'none',
}
}
};
const state = {
configured: {
amoy: false as boolean,
},
instance: {
amoy: null as any,
},
privateKey: {
amoy: null as string,
}
};
const getApi = async (
network: NetworkType = 'amoy'
): Promise<typeof activ> => {
if (!state.configured[network]) {
const initObj = {
LitJsSdkInstance: LitJsSdk,
SiweInstance: Siwe,
backendWalletPrivateKey: null,
}
// NOTE: maybe each account have a differents private keys, for this reason we are adding the set (PRIVATE_KEY) multiples time
switch (network) {
case 'amoy':
initObj.backendWalletPrivateKey = PRIVATE_KEY;
await (LitNodeProviderModule as any).init(initObj);
await v4.ImagesModule.init({ JimpInstance: Jimp });
await EnvModule.set('isProd', false);
await activ.config(AMOY_CONFIG);
break;
case 'polygon':
initObj.backendWalletPrivateKey = PRIVATE_KEY;
await (LitNodeProviderModule as any).init(initObj);
await v4.ImagesModule.init({ JimpInstance: Jimp });
await EnvModule.set('isProd', true);
await activ.config(POLYGON_CONFIG);
break;
}
state.configured[network] = true;
state.instance[network] = activ;
state.privateKey[network] = initObj.backendWalletPrivateKey;
};
const networkChainObj = {
amoy: 'amoy',
polygon: 'polygon',
};
await activ.selectChainContract(networkChainObj[network], 'v4', {
userWalletPrivateKey: state.privateKey[network],
})
return activ
}
Creating Investment Ideas
Create A New Investment Idea
import { v4 } from '@ixily/activ' const newIdea = { public: { title: 'My new idea/nft', description: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been', image: 'data:image/svg+xml;base64,PCEtLSBieSBUcmFkaW5nVmlldyAtLT48c3ZnIHdpZHRoPSI1NiIgaGVpZ2h0PSI1NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjRjc5MzFBIiBkPSJNMCAwaDU2djU2SDB6Ii8+PHBhdGggZD0iTTM5LjkzNiAyNC43MDRjLjUxNS0zLjQ5NC0yLjEzLTUuMzU3LTUuNzczLTYuNjIybDEuMTgtNC43MDgtMi44NzctLjcxNi0xLjE0OCA0LjU5Mi0yLjI5Ni0uNTQ5IDEuMTY0LTQuNjI1LTIuODc4LS43MTUtMS4xODEgNC43MjUtMS44My0uNDMzdi0uMDE2bC0zLjk3Ni0uOTk5LS43NjYgMy4wNzhzMi4xMy41IDIuMDk2LjUxNmMxLjE2NS4zIDEuMzY1IDEuMDY1IDEuMzMyIDEuNjY0bC0xLjMzMiA1LjM5LjMuMS0uMzE2LS4wNjctMS44OCA3LjUzN2MtLjEzMy4zNS0uNS44ODItMS4zMTQuNjY1LjAzMy4wNS0yLjA4LS40OTktMi4wOC0uNDk5bC0xLjQzIDMuMjc4IDMuNzQzLjkzMSAyLjA0Ni41MzMtMS4xOTggNC43NzUgMi44NzguNzE1IDEuMTY1LTQuNzI1IDIuMzEyLjU5OS0xLjE4IDQuNzA4IDIuODc3LjcxNiAxLjE4MS00Ljc3NWM0LjkwOC45MzEgOC42MDIuNTY2IDEwLjE1LTMuODc3IDEuMjQ3LTMuNTc2LS4wNjctNS42MjMtMi42NDYtNi45ODcgMS44OC0uNDE2IDMuMjk0LTEuNjY0IDMuNjYtNC4yMWguMDE3em0tNi41NzIgOS4yMTdjLS44ODIgMy41NzctNi45MDQgMS42My04Ljg1IDEuMTY0bDEuNTgtNi4zMzhjMS45NDYuNDk5IDguMjAyIDEuNDQ3IDcuMjcgNS4xNTd2LjAxN3ptLjg4Mi05LjI2N2MtLjc5OSAzLjI0NC01LjgyMyAxLjU5Ny03LjQzNyAxLjE5OGwxLjQzLTUuNzRjMS42MzEuNCA2Ljg1NSAxLjE2NSA2LjAwNyA0LjU0MnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=', }, content: { reference: v4.generateUUID(), }, strategy: { reference: v4.generateUUID(), name: 'Fake strategy', description: 'Fake strategy just to test', creatorName: 'Fake', image: 'https://previews.123rf.com/images/varijanta/varijanta1601/varijanta160100039/51306453-thin-line-flat-design-banner-of-business-and-marketing-strategy-modern-vector-illustration-concept.jpg', }, creator: { name: 'William Wallace', company: 'WW Company', url: 'https://en.wikipedia.org/wiki/William_Wallace', walletAddress: '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9', }, access: { wallets: ['0x2767441E044aCd9bbC21a759fB0517494875092d'], }, idea: { kind: 'open', asset: { ticker: 'BTCUSDT', description: 'BTC/USDT', }, trade: { conviction: 100, direction: 'long', }, notes: { commentary: 'This trade idea was opened just to test', }, }, pricing: { provider: 'Binance', }, } const activ = await ActivModule.getApi() const data = await activ.createIdea(payload)
Adjusting Investment Ideas
Adjusting Inverstment Ideas
const activ = await ActivModule.getApi() const adjustIdea = await activ.adjustIdea({ ticker: 'BTCUSDT', strategyReference: 'c407705a-6248-451d-bc12-fb7ebb43d05b', creatorWallet: '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9', adjustment: { kind: 'increase', percentage: 20, }, pricingCredentials: { provider: 'Binance', auth: { key: 'your_binance_key', }, }, notes: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been...', })
Closing Investment Ideas
Closing Investment Ideas
const activ = await ActivModule.getApi() const closeIdea = await activ.closeIdea({ ticker: 'BTCUSDT', strategyReference: 'c407705a-6248-451d-bc12-fb7ebb43d05b', creatorWallet: '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9', pricingCredentials: { provider: 'Binance', auth: { key: 'your_binance_key', }, }, notes: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been...', })
Retrieving Investment Ideas
Retrieve all public ideas
const page = 1 const limit = 10 const activ = await ActivModule.getApi() const data = await activ.getAllPublicIdeas(page, limit)
Retrieve the ideas created by the user wallet in session (used in your browser)
const page = 1 const limit = 10 const filter = ['open'] // 'open', 'adjust', 'close' const activ = await ActivModule.getApi() const data = await activ.getIdeasOwnedBy(page, limit, filter)
Retrieve the ideas with access by the user wallet in session (used in your browser)
const page = 1 const limit = 10 const filter = ['open'] // 'open', 'adjust', 'close' const activ = await ActivModule.getApi() const data = await activ.getIdeasClientBy(page, limit, filter)
Retrieve ideas by strategy
const strategyReference = 'c407705a-6248-451d-bc12-fb7ebb43d05b' const page = 1 const limit = 10 const filter = ['open'] // 'open', 'adjust', 'close' const activ = await ActivModule.getApi() const data = await activ.getIdeasByStrategy( strategyReference, page, limit, filter, )
Retrieve closed ideas history by strategy
const activ = await ActivModule.getApi() const data = await activ.getClosedIdeasHistoryByStrategy({ strategyReference: 'c407705a-6248-451d-bc12-fb7ebb43d05b', stages: true, })
Retrieve NFT content/info by ID
const nftId = 10 const activ = await ActivModule.getApi() const data = await activ.getIdeaByNftId(nftId)
Retrieving Investment Strategies
Retrieve all public strategies
const page = 1 const limit = 10 const activ = await ActivModule.getApi() const data = await activ.getAllPublicStrategies(page, limit)
Retrieve the list of strategies created by the user wallet in session (used in your browser)
const page = 1 const limit = 10 const activ = await ActivModule.getApi() const data = await activ.listMyStrategies(page, limit)
Retrieve the list of accesible strategies (strategies with permission/access)
const page = 1 const limit = 10 const activ = await ActivModule.getApi() const data = await activ.listAccesibleStrategies(page, limit)
Retrieve the list of all strategies
const page = 1 const limit = 10 const activ = await ActivModule.getApi() const data = await activ.listAllStrategies(page, limit)
Retrieve the list of all strategies by specific creator (wallet)
const creatorWallet = '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9' const type = 'all' // 'all' | 'my' | 'accesible' | 'public', const page = 1 const limit = 10 const activ = await ActivModule.getApi() const data = await activ.listAllStrategiesByCreator( creatorWallet, type, page, limit, )
Retrieve strategy info
const strategyReference = 'c407705a-6248-451d-bc12-fb7ebb43d05b' const activ = await ActivModule.getApi() const data = await activ.getStrategyInfoDetails(strategyReference)
Provider Authorization (for enabling Copy Trade)
Authorize Provider
const providerAddress = '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9' const activ = await ActivModule.getApi() await activ.authorizeProvider(providerAddress)
Revoke Provider
const providerAddress = '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9' const activ = await ActivModule.getApi() await activ.revokeProvider(providerAddress)
Check Provider Authorization
const providerAddress = '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9' const activ = await ActivModule.getApi() const data = await activ.authorizeCheck(providerAddress)
Create an Idea/NFT in the name of another user (i.e. the provider can create the nft if the client used the method on: - Authorize Provider)
const client = '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC'; const newIdea = {...} // content used like: - Create a new Idea/NFT const activ = await ActivModule.getApi(); const data = await activ.providerCreateIdea(client, newIdea);
Additional Methods
Retrieve wallet info details
const userWallet = '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9' const activ = await ActivModule.getApi() const data = await activ.getWalletInfoDetails(userWallet)
Post mint granting of access/permission to an idea
const nftId = 10 const walletAddresses = ['0x023C04DB0Deb586F32444A4e154596094c52E7Da'] const activ = await ActivModule.getApi() await activ.giveIdeaAccessTo(nftId, walletAddresses)
Retrieve wallet with access/permission to an idea
const nftId = 10 const activ = await ActivModule.getApi() const data = await activ.getIdeaViewers(nftId)
Search asset
const payload = { provider: 'Binance', auth: { key: '123', secret: '456', // optional }, params: { symbol: 'BTCUSDT', }, } const data = await activ.getPricingAsset(payload)
Reset Cache
// content: strategy and idea await activ.resetCache('idea') await activ.resetCache('strategy')
Retrieve estimated costs to create an NFT
const newIdea = true const activ = await ActivModule.getApi() const data = await activ.getEstimatedCosts(newIdea)
Check if a wallet address is valid
const walletAddressList = ['0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9'] const activ = await ActivModule.getApi() const data = await activ.isValidWalletAddress(walletAddressList)
BRA Methods
What do I need to use the BRA methods?
To use the BRA methods you need be authorized for this reason you need generate your own apiKey, steps to get:
- Go here: https://ixily.io/activ/account/profile
- Click to the "API KEYS" section (left menu)
- Copy and pass in the method to call
- Done!
Create A New Investment Idea
import { v4 } from '@ixily/activ' const network = 'amoy' // change as necessary const apiKey = 'your_api_key' const newIdea = { public: { title: 'My new idea/nft', description: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been', image: 'data:image/svg+xml;base64,PCEtLSBieSBUcmFkaW5nVmlldyAtLT48c3ZnIHdpZHRoPSI1NiIgaGVpZ2h0PSI1NiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBmaWxsPSIjRjc5MzFBIiBkPSJNMCAwaDU2djU2SDB6Ii8+PHBhdGggZD0iTTM5LjkzNiAyNC43MDRjLjUxNS0zLjQ5NC0yLjEzLTUuMzU3LTUuNzczLTYuNjIybDEuMTgtNC43MDgtMi44NzctLjcxNi0xLjE0OCA0LjU5Mi0yLjI5Ni0uNTQ5IDEuMTY0LTQuNjI1LTIuODc4LS43MTUtMS4xODEgNC43MjUtMS44My0uNDMzdi0uMDE2bC0zLjk3Ni0uOTk5LS43NjYgMy4wNzhzMi4xMy41IDIuMDk2LjUxNmMxLjE2NS4zIDEuMzY1IDEuMDY1IDEuMzMyIDEuNjY0bC0xLjMzMiA1LjM5LjMuMS0uMzE2LS4wNjctMS44OCA3LjUzN2MtLjEzMy4zNS0uNS44ODItMS4zMTQuNjY1LjAzMy4wNS0yLjA4LS40OTktMi4wOC0uNDk5bC0xLjQzIDMuMjc4IDMuNzQzLjkzMSAyLjA0Ni41MzMtMS4xOTggNC43NzUgMi44NzguNzE1IDEuMTY1LTQuNzI1IDIuMzEyLjU5OS0xLjE4IDQuNzA4IDIuODc3LjcxNiAxLjE4MS00Ljc3NWM0LjkwOC45MzEgOC42MDIuNTY2IDEwLjE1LTMuODc3IDEuMjQ3LTMuNTc2LS4wNjctNS42MjMtMi42NDYtNi45ODcgMS44OC0uNDE2IDMuMjk0LTEuNjY0IDMuNjYtNC4yMWguMDE3em0tNi41NzIgOS4yMTdjLS44ODIgMy41NzctNi45MDQgMS42My04Ljg1IDEuMTY0bDEuNTgtNi4zMzhjMS45NDYuNDk5IDguMjAyIDEuNDQ3IDcuMjcgNS4xNTd2LjAxN3ptLjg4Mi05LjI2N2MtLjc5OSAzLjI0NC01LjgyMyAxLjU5Ny03LjQzNyAxLjE5OGwxLjQzLTUuNzRjMS42MzEuNCA2Ljg1NSAxLjE2NSA2LjAwNyA0LjU0MnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=', }, content: { reference: v4.generateUUID(), }, strategy: { reference: v4.generateUUID(), name: 'Fake strategy', description: 'Fake strategy just to test', creatorName: 'Fake', image: 'https://previews.123rf.com/images/varijanta/varijanta1601/varijanta160100039/51306453-thin-line-flat-design-banner-of-business-and-marketing-strategy-modern-vector-illustration-concept.jpg', }, creator: { name: 'William Wallace', company: 'WW Company', url: 'https://en.wikipedia.org/wiki/William_Wallace', walletAddress: '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9', }, access: { wallets: ['0x2767441E044aCd9bbC21a759fB0517494875092d'], }, idea: { kind: 'open', asset: { ticker: 'BTCUSDT', description: 'BTC/USDT', }, trade: { conviction: 100, direction: 'long', }, notes: { commentary: 'This trade idea was opened just to test', }, }, pricing: { provider: 'Binance', }, } const activ = await ActivModule.getApi() const data = await activ.createIdeaFromFiatMint(payload, apiKey)
Adjusting Inverstment Ideas
const activ = await ActivModule.getApi(); const apiKey = 'your_api_key'; const adjustIdea = await activ.adjustIdeaFromFiatMint( { ticker: 'BTCUSDT', strategyReference: 'c407705a-6248-451d-bc12-fb7ebb43d05b', creatorWallet: '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9', adjustment: { kind: 'increase', percentage: 20 }, pricingCredentials: { provider: 'Binance', auth: { key: 'your_binance_key', } }, notes: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been...', }, apiKey });
Closing Investment Ideas
const activ = await ActivModule.getApi(); const apiKey = 'your_api_key'; const closeIdea = await activ.closeIdeaFromFiatMint( { ticker: 'BTCUSDT', strategyReference: 'c407705a-6248-451d-bc12-fb7ebb43d05b', creatorWallet: '0xaB31A127b112CcF2e97fC54A842A6a3b7070BEa9', pricingCredentials: { provider: 'Binance', auth: { key: 'your_binance_key', } }, notes: 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been...', }, apiKey });
License
ACTIV is licensed under the MIT license. Open Sans is licensed under the Apache license