WaaS SDK

Readme file for WaaS SDK

WaaS SDK for iOS

  • iOS 용 ABC WaaS SDK


Requirements

  • iOS 13


Installation

Swift Package Manager

Add .package(url:_:) to your Package.swift:

dependencies: [
	.package(url: "https://github.com/ahnlabio/waas-ios-sdk.git",
	.branch("main"))
]

SDK 초기화

URL, clientId, clientSecret 은 ABC WaaS Console 에서 확인하실 수 있습니다.

// url: https://docs.waas.myabcwallet.com/getting-started/guide/support/
// abcAccessKey: client id
// abcAccessSecret: client secret

Waas.config(    
		url: "",    
		abcAccessKey: "",    
		abcAccessSecret: "",    
		csURL: "",    
		csPort: ""
)
[WaaS Admin]

Usage

1. ABC 로그인

1-1. 로그인 이메일 보내기

// email: 로그인 코드를 받을 이메일
// language: 전송할 이메일 언어 (한국어, 영어, 인도네시아어, 베트남어, 태국어, 일본어) 지원
// completion: 완료 콜백 (Void / Error)

public func sendLoginCode(    
	email: String,    
	language: Language = .current,    
	completion: @escaping (Result<Void, Error>) -> Void
)
Example
let client = WaasClient()    
client.sendLoginCode(        
	email: testEmail,        
	language: .current
) { result in        
	if case .failure = result {            
		// handle Error        
	}    
}

1-2. 이메일 코드로 로그인하기

// email: 로그인할 이메일
// code: 이메일에 적혀있는 6자리 코드
// completion: 완료 콜백 (OauthToken / Error)

public func login(    
	email: String,    
	code: String,    
	completion: @escaping (Result<OauthToken, Error>) -> Void
)
Example
client.login(        
	email: testEmail,        
	code: "961210" // email code you received    
) { result in        
	switch result {        
	case .success(let authToken):            
		// save abc oauth token        
	case .failure(let error):            
		// handle Error        
	}
}

1-3. 토큰 리프레시

// token: 리프레시 토큰
// completion: 완료 콜백 (OauthToken / Error)

public func refreshToken(    
	token: String,    
	completion: @escaping (Result<OauthToken, Error>) -> Void
)
Example

client.refreshToken(        
	token: refreshToken
) { result in        
	switch result {        
	case .success(let authToken):            
		// save abc oauth token        
	case .failure(let error):            
		// handle Error        
	}
}

2. WaaS 로 서명하기

2-1. EVM Transaction 서명

// accessToken: 로그인 후 발급받은 AccessToken
// keyPassword: 사용자가 입력한 비밀번호
// transaction: 서명할 EVM Transaction 형식
// network: 서명할 네트워크 (ethereum, polygon, klaytn ...)

public func signTransaction(    
	accessToken: String,
	keyPassword: String,    
	transaction: EVMTransaction,    
	network: EVMNetwork
) async throws -> String
Example
// keyshare 를 저장할 저장소

let storage = MemorySignerStorage()
let signer = EVMSignClient(storage: storage)
let signature = try await signer.signTransaction(    
	accessToken: accessToken,    
	keyPassword: keyPassword,    
	transaction: .init(        
		to: "0xFF5f861bed0dfB81aC389aD88d956fE4653cf5D7",        
		value: "0x0"    
	),
	network: .ethereumTestnet
)

3. SDK 에서 지원하지 않는 Method 사용예

WaaS 에는 있지만, SDK 에서 지원하지 않는 API에 대한 사용방법입니다.

아래의 예시는 EVM 의 eth_estimateGas 를 호출하는 방법입니다.

ABC WaaS (eth_estimateGas)

// accessToken 만 있으면 WaaS에서 지원하는 다양한 API를 사용하실 수 있습니다.

func testEstimatedGas() async throws {    
	let urlString = "\(Waas.config.url.absoluteString)/wapi/v2/gas/estimate/legacy"    
	let url = URL(string: urlString)    
	let request = URLRequest(        
		url: url,        
		method: .post,        
		contentType: .urlEncoded,        
		headers: ["Authorization": "Bearer \(accessToken)"],        
		body: [            
			"network": EVMNetwork.ethereumTestnet.pathName,            
			"to": "0xFF5f861bed0dfB81aC389aD88d956fE4653cf5D7",            
			"from": "0xFF5f861bed0dfB81aC389aD88d956fE4653cf5D7",            
			"value": "0x0"        
		]    
	)!    
	
	let (data, response) = try await URLSession.shared.data(for: request)    
	let text = String(data: data, encoding: .utf8)    
	print(text)
}

Last updated