WEMIX3.0
Search…
iOS SDK
이 페이지에서는 dApp 에서 WEMIX Wallet 과 연동하기 위한 iOS SDK 를 설명합니다.

  • iOS 12.0 이상
  • Swift 4.0 이상

Add the following to your podfile
target 'project' do
pod 'WemixWalletSDK-iOS'
end

iOS SDK를 통해 WEMIX Wallet 앱을 실행하려면 Info.plist 파일에 custom scheme 정보를 아래와 같이 추가해 주어야 합니다. 추가할 custom scheme 은 wemix, itms-apps 입니다.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wemix<string> <!-- WEMIX Wallet scheme -->
<string>itms-apps<string> <!-- AppStore scheme -->
</array>

필요한 경우 네트워크를 변경할 수 있습니다. 기본 네트워크는 메인넷이지만, 현재 사용할 수 없습니다.
테스트넷으로 설정해 주어야 합니다.
<key>A2A Wemix Domain</key>
<string>https://a2a.test.wemix.com</string>

iOS SDK에서 App-to-App 요청은 크게 Proposal, Result의 순서로 진행이 됩니다.
  • Proposal 은 dApp에서 실행할 작업을 요청하는 단계로 총 5가지 종류의 요청이 존재하며 요청 시 자동으로 WEMIX Wallet 앱이 실행이 됩니다.
  • Result 는 함수 호출을 통해 결과값을 받고 확인합니다.

Proposal 을 요청하기 위한 dApp의 정보입니다.
Property
Type
Value
Required
name
string
dApp 이름
true
description
string
요청 설명
false
url
string
dApp 대표 URL
false
icon
string
dApp 로고 이미지 URL
false
Example
let metaData = MetaData(name: "dappName", description: "description", url: "url", icon: "iconUrl");

WemixWalletSDK.proposal(metaData, sendData) 를 사용하며 sendData 에 따라 5가지 요청을 제공합니다.
  • null : 지갑주소 요청
  • SendWemix : WEMIX 전송 요청
  • SendToken : TOKEN 전송 요청
  • SendNFT : NFT 전송 요청
  • ExecuteContract : Contract 실행 요청

지갑 주소를 요청합니다. 요청에 대해 사용자 승인이 완료되면 해당 지갑의 주소를 확인할 수 있습니다.
Example
WemixWalletSDK.proposal(metaData: metaData, sendData: nil) { requestID, statusCode in
// 성공이 떨어지면 내부 로직에서 scheme에 requestId를 전달하여 wallet을 호출합니다.
guard let requestId = requestID, !requestId.isEmpty else {
return
}
}

사용자가 보유한 WEMIX 특정 주소로 전송하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
SendWemix(from, to, value)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
받는 사용자의 주소명
value
String
보낼 WEMIX 수량 (단위 wei)
Example
let sendWemix = SendWemix.init(
from: "0x7A8519fE4A25521e4f7692489149BEe8864c6935",
to: "0x23a80bdE8dCDDEf6829beD0d5d966BDBf6cB44C3",
value: "1000000000000000000" // 1 WEMIX
)
WemixWalletSDK.proposal(metaData: metaData, sendData: sendWemix) { requestID, statusCode in
//성공이 떨어지면 내부 로직에서 scheme에 requestId를 전달하여 wallet을 호출합니다.
guard let requestId = requestID, !requestId.isEmpty else {
return
}
}

사용자가 보유한 토큰을 특정 주소로 전송하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
SendToken(from, to , value, contract)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
받는 사용자의 주소명
value
String
보낼 토큰 수량 (decimal 포함)
contract
String
토큰 contract 주소
let sendToken = SendToken.init(
from: "0x7A8519fE4A25521e4f7692489149BEe8864c6935",
to: "0x23a80bdE8dCDDEf6829beD0d5d966BDBf6cB44C3",
value: "10000000000", // In case decimal 10, 1 TOKEN
contract: "0xF6fF95D53E08c9660dC7820fD5A775484f77183A"
);
WemixWalletSDK.proposal(metaData: metaData, sendData: sendToken) { requestID, statusCode in
guard let requestId = requestID, !requestId.isEmpty else {
return
}
}

사용자가 보유한 NFT를 특정 주소로 전송하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
SendNFT(from, to, contract, tokenId)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
받는 사용자의 주소명
contract
String
NFT contract 주소
tokenId
String
전송하려는 NFT token Id
Example
let sendNFT = SendNFT.init(
from: "0x7A8519fE4A25521e4f7692489149BEe8864c6935",
to: "0x23a80bdE8dCDDEf6829beD0d5d966BDBf6cB44C3",
contract: "0xF6fF95D53E08c9660dC7820fD5A775484f77183A",
tokenId: "13" // token id
);
WemixWalletSDK.proposal(metaData: metaData, sendData: sendNFT) { requestID, statusCode in
guard let requestId = requestID, !requestId.isEmpty else {
return
}
}

사용자가 특정 컨트랙트의 함수를 실행하도록 하는 요청입니다. 요청에 대해 사용자 승인이 완료되면 해당 요청의 transactionHash 를 확인할 수 있습니다.
ContractExecute(from, to, abi, params)
Parameter Name
Type
Description
from
String
전송자의 주소. 지갑 사용자가 맞는지 확인용
to
String
contract 주소
contract
String
함수의 abi (json string)
params
String
함수에 제공할 파라미터들 (json string)
Example
let abi = "{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\" ..."
let params = "[\"0xcad9042cf49684939a2f42c2d916d1b6526635c2\", \"500000000000\"]"
let contractExecute = ContractExecute.init(
from: "0x7A8519fE4A25521e4f7692489149BEe8864c6935",
to: "0xF6fF95D53E08c9660dC7820fD5A775484f77183A",
abi: abi,
params: params
);
WemixWalletSDK.proposal(metaData: metaData, sendData: contractExecute) { requestID, statusCode in
guard let requestId = requestID, !requestId.isEmpty else {
return
}
}

요청에 대해 사용자가 승인 이후 dApp 이 foreground 상태로 전환되었을 때 WemixWalletSDK.getResult() 를 사용하여 요청에 대한 결과를 확인합니다.
WemixWalletSDK.getResult(requestId: requestId) { response, statusCode in
if statusCode == 200 {
//주소 요청시
guard let result = response!["result"] as? Dictionary<String, Any>,
let address = result["address"] as? String else {
return
}
//주소 요청 외 모두 txId입니다.
guard let result = response!["result"] as? Dictionary<String, Any>,
let txId = result["transactionHash"] as? String else {
return
}
}
}
Last modified 1mo ago
Copy link
On this page
요구 사항
환경설정
Adding dependency with CocoaPod
Setup Info.plist
API
MetaData
Proposal
Result