主页 > imtoken官网下载 > 在 Go 中买卖比特币

在 Go 中买卖比特币

imtoken官网下载 2024-01-04 05:13:15

cover

选项 1:通过 ExinCore API 进行代币交易

Exincore 提供基于 Mixin Network 的代币交易 API。

您可以向ExinCore支付USDT,ExinCore将以最低的价格和最优惠的交易费用将您购买的比特币转给您,每笔交易都是匿名的,并且可以在区块链上进行验证和交易详细信息只有您和ExinCore知道!

ExinCore 不知道你是谁,它只知道你的 UUID。

基础知识:

你需要先创建一个机器人,方法在教程里一.

查询自己的比特币

安装依赖包

正如我们在教程1中介绍的,我们需要依赖mixin-sdk-go,你应该先安装它,这里我们将安装uuid和msgpack。

  go get -u github.com/vmihailenco/msgpack
  go get -u github.com/satori/go.uuid

充值到 Mixin Network,查看余额。

ExinCore可以进行BTC、USDT、EOS、ETH等交易,这里演示了如何用USDT买BTC或者用BTC买USDT,交易前请查看钱包地址!

完整的步骤如下:

查询自己的比特币

请注意,比特币和 USDT 地址是相同的。

if cmd == "2" {
  userInfo, userID := ReadAssetInfo("BTC")
  fmt.Println("User ID ",userID, "'s BTC Address is: ",
             userInfo["data"].(map[string]interface{})["public_key"])
  fmt.Println("Balance is: ",
             userInfo["data"].(map[string]interface{})["balance"])
}
if cmd == "3" {
  userInfo, userID := ReadAssetInfo("USDT")
  fmt.Println("User ID ",userID, "'s USDT Address is: ",
             userInfo["data"].(map[string]interface{})["public_key"])
  fmt.Println("Balance is: ",
             userInfo["data"].(map[string]interface{})["balance"])
}

查询ExinCore市场价格信息

如果要查询ExinCore市场的价格信息怎么办?您必须首先了解您交易的基础货币是什么。如果你想买比特币卖USDT,那么基础货币就是USDT;如果你想买USDT卖比特币,那么基础货币就是比特币。

if cmd == "6" {
  priceInfo, err := GetMarketPrice(mixin.GetAssetId("USDT"))
  if err != nil {
    log.Fatal(err)
  }
  var marketInfo map[string]interface{}
  err = json.Unmarshal([]byte(priceInfo), &marketInfo)
  fmt.Println("Asset | price | min | max | exchanges")
  for _, v := range (marketInfo["data"].(map[string]interface{})) {
    fmt.Println(v.(map[string]interface{})["exchange_asset_symbol"],"/",
                v.(map[string]interface{})["base_asset_symbol"],
                v.(map[string]interface{})["price"],
                v.(map[string]interface{})["minimum_amount"],
                v.(map[string]interface{})["maximum_amount"],
                v.(map[string]interface{})["exchanges"],
               )
  }
}
func GetMarketPrice(asset_id string) ([]byte, error)  {
    var body []byte
    req, err := http.NewRequest("GET", "https://exinone.com/exincore/markets?base_asset="+asset_id, bytes.NewReader(body))
    if err != nil {
        return nil, err
    }
    req.Header.Set("Content-Type", "application/json")
    resp, err := httpClient.Do(req)
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
  // fmt.Println(resp.Body)
    bt, err := ioutil.ReadAll(resp.Body)
    if resp.StatusCode != http.StatusOK {
        var resp struct {
            Error Error `json:"error"`
        }
        err = json.Unmarshal(bt, &resp)
        if err == nil {
            err = resp.Error
        }
    }
    return bt, err
}

交易前,创建备忘录!

查询自己的比特币

在第2章,基于Mixin网络的PHP比特币开发教程:机器人接受比特币并立即退款给用户。我们已经学会了退还用户的比特币。在这里,除了向ExinCore支付币种外,我们还需要告诉他我们想买什么币种查询自己的比特币,并将我们想买的币种存入备忘录中。

packUuid, _ := uuid.FromString(mixin.GetAssetId("BTC"))
pack, _ := msgpack.Marshal(OrderAction{A: packUuid})
memo := base64.StdEncoding.EncodeToString(pack)
// fmt.Println(memo)

货币交易的完整流程

转币到ExinCore时,将memo写入你要购买的币种,否则ExinCore会直接退币给你!

如果你想卖出比特币买入USDT,调用方法如下:

EXIN_BOT        = "61103d28-3ac2-44a2-ae34-bd956070dab1";
packUuid, _ := uuid.FromString(mixin.GetAssetId("USDT"))
pack, _ := msgpack.Marshal(OrderAction{A: packUuid})
memo := base64.StdEncoding.EncodeToString(pack)
// fmt.Println(memo)
priKey, pToken, sID, userID, uPIN := GetWalletInfo()
bt, err := mixin.Transfer(EXIN_BOT,"0.0001",mixin.GetAssetId("BTC"),memo,
                         messenger.UuidNewV4().String(),
                         uPIN,pToken,userID,sID,priKey)
if err != nil {
        log.Fatal(err)
}
fmt.Println(string(bt))

查询自己的比特币

如果你想卖出USDT购买比特币查询自己的比特币,调用方法如下:

packUuid, _ := uuid.FromString(mixin.GetAssetId("BTC"))
pack, _ := msgpack.Marshal(OrderAction{A: packUuid})
memo := base64.StdEncoding.EncodeToString(pack)
// fmt.Println(memo)
priKey, pToken, sID, userID, uPIN := GetWalletInfo()
bt, err := mixin.Transfer(EXIN_BOT,"0.0001",mixin.GetAssetId("USDT"),memo,
                         messenger.UuidNewV4().String(),
                         uPIN,pToken,userID,sID,priKey)
if err != nil {
        log.Fatal(err)
}
fmt.Println(string(bt))

交易完成后,Exincore 会将您需要的币转入您的账户,并在备忘录中,记录交易价格、交易费用等信息!您只需按如下方式解锁即可!

一次成功的交易如下:

------------MEMO:-coin--exchange--------------
memo: hqFDzQPooVCnMzg3Mi45N6FGqTAuMDAwNzc0NqJGQcQQgVsLGidkNzaPqkLWlPpiCqFUoUahT8QQIbfeL6p5RVOcEP0mLb+t+g==
You Get Coins: 815b0b1a-2764-3736-8faa-42d694fa620a 0.3857508
Successful Exchange:
Fee asset ID: 815b0b1a-2764-3736-8faa-42d694fa620a fee is :0.0007746
Order ID: 21b7de2f-aa79-4553-9c10-fd262dbfadfa Price is :3872.97
--------------memo-record end---------------

读取硬币余额

查询自己的比特币

通过读取币种余额,确认交易!

if cmd == "2" {
  userInfo, userID := ReadAssetInfo("BTC")
  fmt.Println("User ID ",userID, "'s BTC Address is: ",
             userInfo["data"].(map[string]interface{})["public_key"])
  fmt.Println("Balance is: ",
             userInfo["data"].(map[string]interface{})["balance"])
}
if cmd == "3" {
  userInfo, userID := ReadAssetInfo("USDT")
  fmt.Println("User ID ",userID, "'s USDT Address is: ",
             userInfo["data"].(map[string]interface{})["public_key"])
  fmt.Println("Balance is: ",
             userInfo["data"].(map[string]interface{})["balance"])
}

源码执行

执行 go run coin_exchange.go 开始交易。

做出选择:

完整代码

如有问题,请加站长微信联系方式(非本文作者)