코인보내기/Contract 실행

이 문서는 '코인 보내기' 및 '스마트 컨트랙트 실행' 방법에 대하여 설명합니다.

코인보내기 및 스마트 컨트랙트 실행은 지갑 보안 레벨 2 부터 가능합니다.

자세한 내용은 지갑 보안 레벨 항목을 확인하십시오.

Steps

// Sample Usage
let wallet: FncyWallet = try await fncyWallet.getWallet()
// 1. Gas Price 조회
let gas: GasPriceInfo = try await self.fncyWallet.getGasPrice(chainId: 3)
// 2. Ticket 조회
let estimateResult:
 FncyTicket = try await fncyWallet.estimateTicket(wid: wallet.wid,
                                                  chainId: 3,
                                                  signatureType: .assetTransfer,
                                                  toAddress: wallet.walletAddress,
                                                  assetId: 6)
// 3. Ticket 생성
let ticketUUID = try await fncyWallet.makeTicket(wid: wallet.wid,
                                                 chainId: 3,
                                                 signatureType: .assetTransfer,
                                                 toAddress: wallet.walletAddress,
                                                 transferVal: "100000",
                                                 txGasPrice: gasPriceInfo.middleGasPrice.description,
                                                 assetId: 6)
                                                   
print("ticketUUID : ", ticketUUID)

// 4. Ticket 전송
let txId = try await fncyWallet.sendTicket(ticketUuid: ticketUUID, 
                                           pinNumber: "111111")
// 5. Transaction 결과 확인 
print("txID : ", txId)
//txID : 0xc19f68e548c2ed933291aa4cbc9748b4d2b0de4bf1a5516f0b74579fb8e13b54

가스비 조회

체인ID에 해당하는 네트워크(블록체인)의 현재 네트워크 사용료(가스비) 정보를 가져옵니다.

let gas: GasPriceInfo = try await fncyWallet.getGasPrice(chainId: 3)

See Also

getGasPrice

GasPriceInfo

티켓 정보 조회

전송 티켓을 생성하기 전에 실제 전송 가능여부 및 트랜잭션의 Nonce, GasLimit를 확인할 수 있습니다.

전송하는 자산 유형 혹은 WalletConnect를 통한 전송 여부에 따라 올바른 티켓 타입을 선택해야 합니다.

  • AssetTransfer : Coin전송

  • SmartContract : Token전송 및 Contract 실행

  • WalletConnect : WalletConnect연결 시에 사용

See Also

estimateTicket

FncyTicket

TicketType

Coin 전송

let ticketData: FncyTicket = try await fncyWallet.estimateTicket(
wid: 10000, //지갑 ID
chainId: 3, // bsc: 1, eth: 2, fncy: 3
signatureType: TicketType.assetTransfer, 
toAddress: "0x1234...", //코인을 받을 주소
transferVal: "1000000000000000000", //보낼 수량 (단위: wei)
txGasPrice: "10000000000", //Gas Price (단위: wei)
assetId: 6, //보낼 자산 asset ID
maxPriorityPerGas: nil, //ETH 전송일 경우 사용
maxFeePerGas: nil // ETH전송일 경우 사용
)

Token 전송(Contract 실행)

let ticketData: FncyTicket = try await fncyWallet.estimateTicket(
wid: 10000, //지갑 ID
chainId: 3, // bsc: 1, eth: 2, fncy: 3
signatureType: TicketType.smartContract, //
toAddress: "0x1234...", //코인을 받을 주소
transferVal: "0", //보낼 수량 (단위: wei)
txGasPrice: "10000000000", //Gas Price (단위: wei)
contractAddress: "0x1234...", //Contract Address
txInput: "0x123456....", //Data
assetId: 6, //보낼 자산 asset ID
maxPriorityPerGas: nil, //ETH 전송일 경우 사용
maxFeePerGas: nil // ETH전송일 경우 사용
)

WalletConnect

let ticketData: FncyTicket = try await fncyWallet.estimateTicket(
wid: 10000, //지갑 ID
chainId: 3, // bsc: 1, eth: 2, fncy: 3
signatureType: TicketType.walletConnect, //
toAddress: "0x1234...", //코인을 받을 주소
transferVal: "1000000000000000000", //보낼 수량 (단위: wei)
txGasPrice: "10000000000", //Gas Price (단위: wei)
contractAddress: "0x1234...", //Contract Address
txInput: "0x123456....", //Data
assetId: 6, //보낼 자산 asset ID
maxPriorityPerGas: nil, //ETH 전송일 경우 사용
maxFeePerGas: nil // ETH전송일 경우 사용
)

티켓 생성

네트워크에 전송할 티켓(트랜잭션 정보)을 서버에 등록하고, 해당 티켓의 티켓UUID(TicketUUID)를 가져옵니다.

티켓 생성에 실패할 경우 TicketUUID는 반환되지 않습니다.

See Also

makeTicket

TicketType

Coin 전송

let ticketUUID: String = try await fncyWallet.makeTicket(
wid: 10000, //지갑 ID
chainId: 3, // bsc: 1, eth: 2, fncy: 3
signatureType: TicketType.assetTransfer, 
toAddress: "0x1234...", //코인을 받을 주소
transferVal: "1000000000000000000", //보낼 수량 (단위: wei)
txGasPrice: "10000000000", //Gas Price (단위: wei)
assetId: 6, //보낼 자산 asset ID
maxPriorityPerGas: nil, //ETH 전송일 경우 사용
maxFeePerGas: nil, // ETH전송일 경우 사용
txGasLimit: 21000 // Gas Limit
)

Token 전송(Contract 실행)

let ticketUUID: String = try await fncyWallet.makeTicket(
wid: 10000, //지갑 ID
chainId: 3, // bsc: 1, eth: 2, fncy: 3
signatureType: TicketType.smartContract, //
toAddress: "0x1234...", //코인을 받을 주소
transferVal: "0", //보낼 수량 (단위: wei)
txGasPrice: "10000000000", //Gas Price (단위: wei)
contractAddress: "0x1234...", //Contract Address
txInput: "0x123456....", //Data
assetId: 6, //보낼 자산 asset ID
maxPriorityPerGas: nil, //ETH 전송일 경우 사용
maxFeePerGas: nil, // ETH전송일 경우 사용
txGasLimit: 21000 // Gas Limit
)

WalletConnect

let ticketUUID: String = try await fncyWallet.makeTicket(
wid: 10000, //지갑 ID
chainId: 3, // bsc: 1, eth: 2, fncy: 3
signatureType: TicketType.walletConnect, //
toAddress: "0x1234...", //코인을 받을 주소
transferVal: "1000000000000000000", //보낼 수량 (단위: wei)
txGasPrice: "10000000000", //Gas Price (단위: wei)
contractAddress: "0x1234...", //Contract Address
txInput: "0x123456....", //Data
assetId: 6, //보낼 자산 asset ID
maxPriorityPerGas: nil, //ETH 전송일 경우 사용
maxFeePerGas: nil, // ETH전송일 경우 사용
txGasLimit: 21000 // Gas Limit
)

티켓 정보 확인

발행된 티켓UUID를 사용하여 해당 티켓 정보를 조회할 수 있습니다.

티켓UUID를 얻는 방법은 티켓 생성을 확인하십시오.

let ticket: FncyTicket = try await fncyWallet.getTicketInfo(ticketUuid: "ticketUUID")

See Also

getTicketInfo

FncyTicket

티켓 전송

티켓 전송은 서버에 등록된 티켓 정보를 사용하여 실제 트랜잭션 실행을 요청합니다.

티켓 전송이 성공하면 해당 트랜잭션 이력은 블록체인에 영구적으로 포함되며 변경하거나 취소할 수 없습니다.

발행된 티켓UUID지갑 비밀번호를 전달하여 티켓에 해당하는 트랜잭션을 실행시킵니다.

티켓UUID를 얻는 방법은 티켓 생성을 확인하십시오.

let txId: String = try await fncyWallet.sendTicket(
ticketUuid: "ticketUuid", // Ticekt UUID
pinNumber: "000000" // 지갑 비밀번호
)

트랜잭션 결과 확인

반환된 txId를 FncyScan에서 조회

let txId = try await fncyWallet.sendTicket(ticketUuid: "ticketUuid"
                                           pinNumber: "000000")                                                                 
print(txId)
// 0xc19f68e548c2ed933291aa4cbc9748b4d2b0de4bf1a5516f0b74579fb8e13b54
// FncyScan(Testnet): https://fncyscan-testnet.fncy.world/tx/0xc19f68e548c2ed933291aa4cbc9748b4d2b0de4bf1a5516f0b74579fb8e13b54