Skip to content
This repository was archived by the owner on Jul 10, 2020. It is now read-only.
This repository was archived by the owner on Jul 10, 2020. It is now read-only.

Add Support for Waves RPC #84

Description

@leoneparise

Waves RPC definition:

enum WavesRPC {
    case balance(address: String)
    case transaction(String)
    case broadcast(Data)
    case nodeInfo
}

extension WavesRPC: TargetType {
    var baseURL: URL {
        return RPCServer(.waves).rpcURL
    }

    var path: String {
        switch self {
        case .balance(let address):
            return "/addresses/balance/\(address)/0"
        case .transaction(let hash):
            return "/transactions/info/\(hash)"
        case .broadcast:
            return "/transactions/broadcast"
        case .nodeInfo:
            return "/node/status"
        }
    }

    var method: Moya.Method {
        switch self {
        case .balance, .transaction, .nodeInfo:
            return .get
        case .broadcast:
            return .post
        }
    }

    var sampleData: Data {
        return Data()
    }

    var task: Task {
        switch self {
        case .balance, .transaction, .nodeInfo:
            return .requestPlain
        case .broadcast(let data):
            return Task.requestData(data)
        }
    }

    var headers: [String: String]? {
        return [
            "content-type": "application/json",
        ]
    }
}

extension WavesRPC: RPCErrorProcessor {
    public func catchError(_ response: Response) -> Error? {
        let range = 200...399
        guard !range.contains(response.statusCode) else {
            return nil
        }
        guard let error = try? response.map(WavesRPCError.self) else {
            return nil
        }
        return JSONRPCError(code: error.error, message: error.message)
    }
}

Models:

struct WavesBalance: Codable {
    let balance: Int64
}

struct WavesSentTransaction: Codable {
    let id: String
}

struct WavesRPCError: Codable {
    let error: Int
    let message: String
}

struct WavesTransactionInfo: Codable {
    let height: Int64
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions