cardano 接口

api 文档

ada 不使用 rpc, 提供了 * api v0 * api v1

基本没有什么详述的内容

也给了 swagger 文件

生成调用文件

取所有的可用账户

curl -k https://118.193.19.254:8090/api/accounts

https 证书问题

提供的 api 都是 https 的, 对 localhost 做了自签名, 监听地址也只是 localhost

使用 nginx 反向代理, 绕过转为 http, 并且可以由外部访问

/etc/nginx/conf.d/cardano.conf 内容如下:

server {
    listen       118.193.19.254:80;
    server_name  118.193.19.254;
    ##白名单设置
    allow 47.88.137.77;
    allow 127.0.0.1;
    deny all;

    location / {
         proxy_pass                    https://localhost:8090/;
         proxy_ssl_trusted_certificate /home/panchao/cardano-sl/state-wallet-mainnet/tls/server.includesprivatekey.pem;
         proxy_ssl_verify              off;
    }
}

本身没有什么防护, 只能用白名单的限制

修改 swagger 文件

wget https://cardanodocs.com/technical/wallet/api/v1/swagger.json

替换所有的 localhost:8090 以及 127.0.0.1:8090 为正式在用的 地址

生成代码

使用 go-swagger 来生成, 安装即可

swagger generate client -f swagger.json

生成出来的代码. 调用报错了

测试代码

// Code generated by go-swagger; DO NOT EDIT.

package client

import (
	"testing"
)

func TestNewHTTPClient(t *testing.T) {
	// page := int64(1)
	// perPage := int64(10)
	// params := wallets.GetAPIV1WalletsParams{Page: &page, PerPage: &perPage}
	result, err := Default.Wallets.GetAPIV1Wallets(nil)
	if err != nil {
		t.Fatal(err)
	}
	t.Log(result)
}
=== RUN   TestNewHTTPClient
--- FAIL: TestNewHTTPClient (0.43s)
        cardano_wallet_client_test.go:15: json: cannot unmarshal array into Go struct field WalletResponseWallet.data of type models.Wallet
FAIL
exit status 1
FAIL    github.com/lomocoin/go-cardano-sl/client        0.481s

swagger 检查. 报错太多

上传到了 https://editor.swagger.io/. 很多报错

网友建议来这里问问: https://github.com/input-output-hk/cardano-sl/tree/develop/wallet-new/generate-swagger-file

swagger 生成代码(忽略)

api v0 问题

无法使用 swagger-codegen 生成, 报错

swagger-codegen generate -i https://cardanodocs.com/technical/wallet/api/v0/swagger.json -l go
[main] ERROR io.swagger.codegen.DefaultCodegen - unexpected missing property for name response
Exception in thread "main" java.lang.RuntimeException: Could not process operation:
  Tag: Tag {
        name: V0 (Deprecated)
        description: null
        externalDocs: null
        extensions:{}}
  Operation: null
  Resource: get /api/txs/histories

int64 溢出问题

因为有负数, 粗暴的替换为 int64 的最大值

https 证书问题

使用 go-swagger 生成, 写了测试代码, 调用证书验证出错. api 只有对 localhost 的签名

测试代码:

// Code generated by go-swagger; DO NOT EDIT.

package client

import (
	"testing"
)

func TestNewHTTPClient(t *testing.T) {
	data, err := Default.V0Deprecated.GetAPISettingsSyncProgress(nil)
	if err != nil {
		t.Fatal(err)
	}
	t.Log(data.Error())
	data1, err := Default.V0Deprecated.GetAPIInfo(nil)
	if err != nil {
		t.Fatal(err)
	}
	t.Log(data1.Error())
}

修改 github.com/go-openapi/runtime/client/runtime.go

	// rt.Transport = http.DefaultTransport
	rt.Transport = &http.Transport{
		TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
	}

调用时候不再验证证书

json 结构错误的问题

提问

结构全包在了 Right 里, 结构也不对..

{
  "Right": {
  }
}

放弃用 swagger 了, 直接写 https 调用

api v1 问题 (忽略)

swagger generate client -f https://cardanodocs.com/technical/wallet/api/v1/swagger.json -A lomosdk

生成出来的东西, 感觉没法用, 很多错误. int64 也溢出, 变量名同名重复定义

swagger-codegen generate -i https://cardanodocs.com/technical/wallet/api/v1/swagger.json -l go

v0 无法生成出来原因, server 启动的只是 v0, v1 的 url 找不到

要使用 v1 的 api, 得使用 develop 分支来编译

faucet (忽略)

https://cardanofaucet.info/account 可以申请到币来开发

https://tada.iohk.io/ 无法访问

[email protected]483648 上面申请了一些币