Skip to content

HeesungB/NEARYou

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NEARYou Demo

About NEARYou

NEARYou allows NEAR wallet user(sender) to create link for giving their NFT(Non-Fungible-Token). Their friends(receiver) can claim NFT through the link. NEARYou contract stores sender's NFT's token_id(NFT id) and NEAR for activaing new account to send NFT when receiver requests claim.

How NEARYou Demo Works

Sender, who has NFT:

  • Login with NEAR web wallet.
  • Choose NFT that they want to send in "My NFTs" section.
  • Click "Approve" button to give authority to NEARYou contract. (This might take some time to NEAR protocol reflects the change. After a moment, the button will change to "Drop" automatically.)
  • Cilck "Drop" button to get link for dropping NFT.
  • Send copied link to receiver.

Receiver, who has NEAR wallet account:

  • Click the link that sender gave you.
  • Paste the link in the box and click claim button.
  • Get the NFT.

Receiver, who doesn’t have NEAR wallet account:

  • Click the link that sender gave you.
  • Make new NEAR wallet account.
  • Get the NFT.

Code

Repo Structure - /src

├── App.css
├── App.js
├── App.test.js
├── Drops.js
├── Drops.scss
├── __mocks__
   └── fileMock.js
├── __snapshots__
   └── App.test.js.snap
├── apis
   └── index.js
├── assets
   ├── gray_near_logo.svg
   ├── logo.svg
   └── near.svg
├── config.js
├── favicon.ico
├── index.html
├── index.js
├── jest.init.js
├── main.test.js
├── util
   ├── near-util.js
   └── util.js
└── wallet
    └── login
        └── index.html
  • config.js : manage network connection.
  • drop.js : manage making linkdrop and claim NFT.

drop.js

drop.js has functions that calls NEARYou contract's core function. drop.js has createNFTdrop() , approveUser() and getContract() function which calls NEARYou contract's send() , nft_approve() .

createNFTdrop()

async function fundDropNft(nft_id) {
    const newKeyPair = getNewKeyPair();
    const public_key = (newKeyPair.public_key = newKeyPair.publicKey
      .toString()
      .replace("ed25519:", ""));

    downloadKeyFile(public_key, newKeyPair);

    newKeyPair.nft_id = nft_id;
    newKeyPair.ts = Date.now();
    await addDrop(newKeyPair);

    const { contract } = window;
    try {
      const amount = toNear(minimumGasFee);
      await contract.send(
        { public_key: public_key, nft_id: nft_id },
        BOATLOAD_OF_GAS,
        amount
      );
    } catch (e) {
      console.warn(e);
    }
  }
  • createNFTdrop() creates newKeyPair .
  • createNFTdrop() calls NEARYou's send() and passes public key and nft_id .

approveUser()

async function approveUser(nft_id) {
    const account = (window.account = window.walletConnection.account());
    const nftContract = await new nearApi.Contract(account, nftContractName, {
      viewMethods: ["get_key_balance"],
      changeMethods: ["nft_approve"],
      sender: window.currentUser.accountId,
    });

    try {
      const amount = toNear(minimumGasFee);
      const result = await nftContract.nft_approve(
        { token_id: nft_id, account_id: contractName },
        BOATLOAD_OF_GAS,
        amount
      );
      console.log("result: ", result);
    } catch (e) {
      console.warn(e);
    }
  }
  • approveUser() get current login account and nft contract.
  • approveUser() calls nft contract's nft_approve() to give authority to the NEARYou contract.

Getting Started

Installation

Clone this repository

git clone 
cd 

Install dependencies

yarn

Modify config.js

const CONTRACT_NAME = 'YOUR_NEARYou_CONTRACT';
const NFT_CONTRACT_NAME = 'NTF_MINTED_CONTRACT';

Run

yarn dev

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 83.7%
  • HTML 10.2%
  • CSS 4.9%
  • SCSS 1.2%