컨트랙트 실행

1. Request.executeContractWithEncoded (>= v1.2.0)

Parameters

이름타입설명

chainId

number

해당 네트워크의 체인 아이디

appName

string

컨트랙트 실행 시 FAVORLET 앱에 노출될 이름

transactions

object array

컨트랙트를 실행하기 위해 필요한 정보

(자세한 내용은 아래를 참고)

transactions 객체는 다음을 포함합니다.

이름타입설명

from

string

트랜잭션을 호출할 지갑 주소

to

string

호출되는 컨트랙트 주소

value

string

(optional) 호출하는 abi 함수가 payable 인 경우 플랫폼 코인 전송

data

string

함수 signature와 Solidity tightly packed 형식으로 전달된 매개 변수를 인코딩한 값입니다. Interface

web3.eth.Contract — web3.js 1.0.0 documentation

gasLimit

string

(optional) 사용할 gasLimit 없을시 앱내 estimate 함수실행

Response

이름타입설명

requestId

string

작업 또는 트랜잭션 요청을 추적하기 위한 id

expiredAt

number

작업 또는 트랜잭션 요청이 만료 되는 시간(단위: 초)

Example

import { Request } from "favorlet.js";

const response = await Request.executeContractWithEncoded({
  chainId: 8217, // 해당 체인 id
  appName: "BlockChainApp", // FAVORLET 앱에 노출
  transactions: [
    {
      from: "0x{address in hex}", // 트랜잭션을 호출할 지갑 주소
      to: "0x{address in hex}", // 호출되는 컨트랙트 주소
      value: "1000000000000000000", // 호출하는 abi 함수가 payable 인 경우 플랫폼 코인 전송
      data: "0x{hex}"
    },
  ],
});

console.log(response);
/*
{
  requestId: "4ee3ed57-b785-4196-9018-7b682c7a8048",
  expiredAt: 1667893310,
}
*/

Parameters

타입설명

string

Request 요청시 전달받은 requestId

Response

타입설명

string

FAVORLET 앱 내 해당 요청 페이지 DeepLink

Example

import { createDeepLink } from "favorlet.js";

const deepLink = createDeepLink(response.requestId); // Request를 통해 받은 requestId

/*
- PC: 생성된 deepLink를 qrcode 라이브러리를 이용하여 QR 생성 후 스마트폰으로 스캔
- Mobile: window.location.href 등을 사용하여 생성된 deepLink로 직접 이동
*/
console.log(deepLink);
// https://app.favorlet.link/?requestId=4ee3ed57-b785-4196-9018-7b682c7a8048

3. receipt

import { receipt } from "favorlet.js";

const result = await receipt(response.requestId); // Request를 통해 받은 requestId

console.log(result);
/*
- status에 따라 이후 분기 처리

### requested
{
  requestId: "4ee3ed57-b785-4196-9018-7b682c7a8048",
  expiredAt: 1667893310,
  action: "executeContract",
  transactions: [
    { status: "requested" }
  ]
}

### executed
{
  requestId: "4ee3ed57-b785-4196-9018-7b682c7a8048",
  expiredAt: 1667893310,
  action: "executeContract",
  transactions: [
    { status: "executed" }
  ]
}

### canceled
{
  requestId: "4ee3ed57-b785-4196-9018-7b682c7a8048",
  expiredAt: 1667893310,
  action: "executeContract",
  transactions: [
    { 
      status: "canceled",
      txHash: null,
      errorMessage: null
    }
  ]
}

### failed
{
  requestId: "4ee3ed57-b785-4196-9018-7b682c7a8048",
  expiredAt: 1667893310,
  action: "executeContract",
  transactions: [
    { 
      status: "failed",
      txHash: "0x5a4e16cfe0c21c3cd20456340b8614f585d951d9b931b515b11575d08142a6e2",
      errorMessage: "execution reverted : invalid id"
    }
  ]
}

### succeed
{
  requestId: "4ee3ed57-b785-4196-9018-7b682c7a8048",
  expiredAt: 1667893310,
  action: "executeContract",
  transactions: [
    { 
      status: "succeed",
      txHash: "0x5a4e16cfe0c21c3cd20456340b8614f585d951d9b931b515b11575d08142a6e2",
      errorMessage: null
    }
  ]
}
*/

Deprecated

1. Request.executeContract

FAVORLET js 1.2.0부터는 Request.executeContractWithEncoded를 사용해주세요.

Parameters

이름타입설명

chainId

number

해당 네트워크의 체인 아이디

appName

string

컨트랙트 실행 시 FAVORLET 앱에 노출될 이름

transactions

object array

컨트랙트를 실행하기 위해 필요한 정보

(자세한 내용은 아래를 참고)

transactions 객체는 다음을 포함합니다.

이름타입설명

from

string

트랜잭션을 호출할 지갑 주소

to

string

호출되는 컨트랙트 주소

value

string

(optional) 호출하는 abi 함수가 payable 인 경우 플랫폼 코인 전송

abi

string

트랜잭션을 발생시키기 위한 abi

params

string

트랜잭션을 발생시키기 위한 abi 함수의 파라미터

functionName

string

abi에서 호출 하려는 함수 이름

gasLimit

string

사용할 gasLimit (optional) 없을 시, 앱 내 estimate 함수 실행

Response

이름타입설명

requestId

string

작업 또는 트랜잭션 요청을 추적하기 위한 id

appName

number

작업 또는 트랜잭션 요청이 만료 되는 시간(단위: 초)

Example

TRANSFER_ABI.json
// TRANSFER_ABI.json (테스트 파일)
[
  {
    "inputs": [
      {
        "name": "_to",
        "type": "address"
      },
      {
        "name": "_value",
        "type": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "",
        "type": "bool"
      }
    ],
    "name": "transfer",
    "payable": false,
    "stateMutability": "nonpayable",
    "type": "function"
  }
]
import { Request } from "favorlet.js";

const response = await Request.executeContract({
  chainId: 8217, // 해당 체인 id
  appName: "BlockChainApp", // FAVORLET 앱에 노출
  transactions: [
    {
      from: "0x{address in hex}", // 트랜잭션을 호출할 지갑 주소
      to: "0x{address in hex}", // 호출되는 컨트랙트 주소
      value: "1000000000000000000", // 호출하는 abi 함수가 payable 인 경우 플랫폼 코인 전송
      abi: JSON.stringify(TRANSFER_ABI), // 트랜잭션을 발생시키기 위한 abi
      params: `["0x{address in hex}", 1]`, // 트랜잭션을 발생시키기 위한 abi 함수의 파라미터
      functionName: "transfer", // abi에서 호출 하려는 함수 이름
    },
  ],
});

console.log(response);
/*
{
  requestId: "4ee3ed57-b785-4196-9018-7b682c7a8048",
  expiredAt: 1667893310,
}
*/

Last updated