npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@goblinsax/gs-sdk

v1.1.13

Published

SDK to take loan from Goblin Sax for user's NFT

Downloads

55

Readme

Goblin Sax SDK

A javascript library to take loans on NFTs from Goblin Sax. The mainnet version of Goblin Sax SDK requires Goblin Sax API Key. Contact Us if you don't have it.

Install

npm i @goblinsax/gs-sdk

Custom Install

Install dev dependecies:

npm install --dev

Then build using:

npm run build

Tests

Copy .env-example and create .env. Tests are done on the GOERLI network. After the environment variables are set, tests can be run using:

npm test

Example

examples/example.ts: A script for using the SDK to take loans

examples/example_bridging.ts: A script for using the SDK to bridge WETH to arbitrum

examples/exampleBnpl.ts: A script for using the SDK to make a BNPL

Getting Started

An ethers provider, Goblin Sax API key and the current network ("GOERLI" or "MAINNET") should be passed to instantiate the API.

ECMA:

import { GoblinSaxAPI } from "@goblinsax/gs-sdk";
let gs = new GoblinSaxAPI(<ethers-signer>, <goblin-sax-api-key>, <MAINNET | GOERLI>)

CommonJS:

const { GoblinSaxAPI } = require("@goblinsax/gs-sdk");
let gs = new GoblinSaxAPI(<ethers-signer>, <goblin-sax-api-key>, <MAINNET | GOERLI>)

gs.getWhitelist(): Promise<GS_API_Collections["whitelist"]>

Returns assets Goblin Sax is currently providing loans on.

Returns:

{"0xd4e4078ca3495de5b1d4db434bebc5a986197782": "autoglyphs", "0x7bd29408f11d2bfc23c34f18275bbf23bb716bc7": "meebits", "0x8a90cab2b38dba80c64b7734e58ee1db38b8992e": "doodles-official", "0xb7f7f6c52f2e2fdb1963eab30438024864c313f6": "cryptopunks", "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d": "boredapeyachtclub", "0xa3aee8bce55beea1951ef834b99f3ac60d1abeeb": "veefriends", "0x49cf6f5d44e70224e2e23fdcdd2c053f30ada28b": "clonex", "0x60e4d786628fea6478f785a6d7e704777c86a7c6": "mutant-ape-yacht-club", "0xa7d8d9ef8d8ce8992df33d8b8cf4aebabd5bd270": "ringers-by-dmitri-cherniak", "0x059edd72cd353df5106d2b9cc5ab83a52287ac3a": "chromie-squiggle-by-snowfro"}

Response is a dictionary of collection address and slug. Once the whitelist is extracted, user's wallet must be viewed to see the assets they own. Refer to example/examples.js for an implementation.

gs.getTerms(collection: string, id: string): Promise<GS_API_GetLoanTerms["body"]>

Returns terms GS provides loan on for that asset

Example:

{ price: 0.1, offers: { '7': [ [

				  { LTV: 0.1, APR: 10 },
				  { LTV: 0.2, APR: 10 },
				  { LTV: 0.3, APR: 10 },
				  { LTV: 0.4, APR: 10 },
				  { LTV: 0.55, APR: 10 }
				] ],

...} }

Price is Goblin Sax's valuation for that asset. Inside the offer dictionary, key is duration GS is willing to provide loans for. LTV and APRs are the list of LTV and APR GS is willing to provide.

Based on this Whitelist and Terms, Goblin Sax SDK Offers two ways of interaction.

1) Loans

These are regular loans as provided by NFTFi that allows users to borrow an NFT for a provided duration.

gs.beginLoan(collection: string, id: string, duration: string, borrowerAddress: string, principal: string, apr: number): Promise<ethers.ContractTransaction>

Begin Loan for a given NFT collection id. Duration in minutes, borrower address, Pricipal in WEI and APR in percentage (eg 10)

gs.getLoans(ALCHEMY_API: string): Promise<GetLoansReturnType>

Returns all active loans done by the user. Alchemy API is used for this purpose and must be provided. Example:

{ '8197': {loanPrincipalAmount: BigNumber { _hex: '0x2386f26fc10000', _isBigNumber: true }, maximumRepaymentAmount: BigNumber { _hex: '0x239863ae87c9a4', _isBigNumber: true }, nftCollateralId: BigNumber { _hex: '0x137167', _isBigNumber: true }, loanERC20Denomination: '0xc778417E063141139Fce010982780140Aa0cD5Ab', loanDuration: 604800, loanInterestRateForDurationInBasisPoints: 0, loanAdminFeeInBasisPoints: 500, nftCollateralWrapper: '0xcde60C2C4D52E08706786A3CAe2726E13D01299f', loanStartTime: BigNumber { _hex: '0x62db2e24', _isBigNumber: true }, nftCollateralContract: '0xf5de760f2e916647fd766B4AD9E85ff943cE3A2b', borrower: '0x5664198BDb6AB7337b70742ff4BDD935f81e4Dcd'} , ... }

gs.repayLoan(loanId: ethers.BigNumberish): Promise<void>

The loanId to repay from must be passed to create the repayment.

gs.bridgeFunds(amount: String): Promise<void>

The amount of WETH to bridge to arbitrum. If you are primarily a L2 protocol, this function can be used to bridge the funds to a different network once the loan starts and the user's wallet receives ETH in the mainnet

gs.bridgeStatus(txHash: String, bridge: String): Promise<void>

Shows the status of bridging. It returns DONE, FAILED, or PENDING. It should be called with the responses from bridgeFunds function

2) Buy now, pay later (BNPL)

Buy now pay later is a new functionality developed by Goblin sax that allows to buy an asset today and pay for it later on.

To do so, a user has to find an asset of a collection whitelisted by Goblin sax and listed for ser in a marketplace. At the moment we only support Opensea. Then, it has to call gs.bnplAllowance to approve the bnpl contract and after the approval was done, call gs.bnplOS to buy the asset.

After the buy was done, the user will have an active loan to pay. Once the loan is paid the asset will be transferred to the user's wallet in the same transaction.

getOSListing(collection: string, assetId: string)

This function receives the NFT collection address and the assetId. If the asset is listed, this function will return the listing information from Opensea.

bnplAllowance(token: string, marketPrice: string, principal: string, gsFee: string): Promise<{ isAllowanceRequired: boolean; approve: () => Promise<ethers.ContractTransaction>;}>

This function checks if the wallet connected has a limit allowed for the bnpl contract to take a loan in the modality of BNPL. It receives the token in which the asset has to be paid, the price of the asset listed in the market, the principal (Goblin sax valuation * LTV), and the Goblin sax Fee. It returns an object with two values: isAllowanceRequired a boolean value and approve, a function that if called will trigger a transaction to make the approval.

bnplOS(collection: string, assetId: string, duration: string, borrowerAddress: string, principal: string, apr: number): Promise<ethers.ContractTransaction>

This function is called to trigger a bnpl transaction for an asset in Opensea. It receives the collection address, the asset id, the duration of the loan, the address that will borrow the money, the principal and the APR. The duration, borrowerAddress, and apr values needed are obtained from calling gs.getTerms(collection, id). Before calling this function make sure gs.bnplAllowance(...) returns isAllowanceRequired == true.

`executeBnpl(collection: string, assetId: string, assetType: "ERC721" | "ERC1155", duration: string, borrowerAddress: string, principal: string, apr: number, buyData: string, module: string): Promise<ethers.ContractTransaction>

This function is thought to be used by marketplaces seeking for integration with Goblin sax. module is the address of a module following this interface IMarketModule. buyData is the encoded data of the buy function on the marketplace. The duration, borrowerAddress, and apr values needed are obtained from calling gs.getTerms(collection, id). Before calling this function make sure gs.bnplAllowance(...) returns isAllowanceRequired == true.