本文整理汇总了Golang中github.com/skycoin/skycoin-exchange/src/pp.MakeErrResWithCode函数的典型用法代码示例。如果您正苦于以下问题:Golang MakeErrResWithCode函数的具体用法?Golang MakeErrResWithCode怎么用?Golang MakeErrResWithCode使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MakeErrResWithCode函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: GetAccountBalance
// GetBalance return balance of specific account.
func GetAccountBalance(ee engine.Exchange) sknet.HandlerFunc {
return func(c *sknet.Context) error {
rlt := &pp.EmptyRes{}
for {
req := pp.GetAccountBalanceReq{}
if err := c.BindJSON(&req); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
// validate pubkey
pubkey := req.GetPubkey()
if err := validatePubkey(pubkey); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongPubkey)
break
}
a, err := ee.GetAccount(pubkey)
if err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_NotExits)
break
}
bal := a.GetBalance(req.GetCoinType())
bres := pp.GetAccountBalanceRes{
Result: pp.MakeResultWithCode(pp.ErrCode_Success),
Balance: &pp.Balance{Amount: pp.PtrUint64(bal)},
}
return c.SendJSON(&bres)
}
return c.Error(rlt)
}
}
示例2: GetRawTx
// GetRawTx return rawtx of specifc tx.
func GetRawTx(egn engine.Exchange) sknet.HandlerFunc {
return func(c *sknet.Context) error {
var rlt *pp.EmptyRes
for {
req := pp.GetRawTxReq{}
if err := c.BindJSON(&req); err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
coin, err := egn.GetCoin(req.GetCoinType())
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrRes(err)
break
}
rawtx, err := coin.GetRawTx(req.GetTxid())
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
res := pp.GetRawTxRes{
Result: pp.MakeResultWithCode(pp.ErrCode_Success),
CoinType: req.CoinType,
Rawtx: pp.PtrString(rawtx),
}
return c.SendJSON(&res)
}
return c.Error(rlt)
}
}
示例3: Authorize
// Authorize will decrypt the request, and it's a buildin middleware for skynet.
func Authorize(servSeckey string) HandlerFunc {
return func(c *Context) error {
var (
req pp.EncryptReq
rlt *pp.EmptyRes
)
c.ServSeckey = servSeckey
for {
if c.UnmarshalReq(&req) == nil {
// validate pubkey.
if err := validatePubkey(req.GetPubkey()); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongPubkey)
break
}
pubkey, err := cipher.PubKeyFromHex(req.GetPubkey())
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongPubkey)
break
}
c.Pubkey = pubkey.Hex()
seckey, err := cipher.SecKeyFromHex(servSeckey)
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_ServerError)
break
}
key := cipher.ECDH(pubkey, seckey)
data, err := cipher.Chacha20Decrypt(req.GetEncryptdata(), key, req.GetNonce())
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_UnAuthorized)
break
}
ok, err := regexp.MatchString(`^\{.*\}$`, string(data))
if err != nil || !ok {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_UnAuthorized)
break
}
c.Raw = data
return c.Next()
}
rlt = pp.MakeErrRes(errors.New("bad request"))
break
}
return c.Error(rlt)
}
}
示例4: CreateOrder
// CreateOrder create order through exchange server.
// mode: POST
// url: /api/v1/account/order?coin_pair=[:coin_pair]&type=[:type]&price=[:price]&amt=[:amt]
// params:
// coin_pair: order coin pair.
// type: order type, can be bid or ask.
// price: price.
// amt: amount.
func CreateOrder(se Servicer) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
rlt := &pp.EmptyRes{}
for {
req, err := makeOrderReq(r)
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrRes(err)
break
}
a, err := account.GetActive()
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrRes(err)
break
}
req.Pubkey = pp.PtrString(a.Pubkey)
var res pp.OrderRes
if err := sknet.EncryGet(se.GetServAddr(), "/create/order", req, &res); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_ServerError)
break
}
sendJSON(w, res)
return
}
sendJSON(w, rlt)
}
}
示例5: GetAddresses
// GetAddresses get all addresses in wallet.
// mode: GET
// url: /api/v1/wallet/addresses?id=[:id]
// params:
// id: wallet id.
func GetAddresses(se Servicer) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
var rlt *pp.EmptyRes
for {
id := r.FormValue("id")
if id == "" {
rlt = pp.MakeErrRes(errors.New("id is required"))
break
}
addrs, err := wallet.GetAddresses(id)
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
res := struct {
Result *pp.Result `json:"result"`
Addresses []string `json:"addresses"`
}{
Result: pp.MakeResultWithCode(pp.ErrCode_Success),
Addresses: addrs,
}
sendJSON(w, &res)
return
}
sendJSON(w, rlt)
}
}
示例6: GetRawTx
// GetRawTx get raw tx by txid.
// mode: GET
// url: /api/v1/rawtx?coin_type=[:coin_type]&txid=[:txid]
func GetRawTx(se Servicer) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
var rlt *pp.EmptyRes
for {
// get coin type
cp := r.FormValue("coin_type")
if cp == "" {
logger.Error("no coin type")
rlt = pp.MakeErrRes(errors.New("no coin type"))
break
}
// get txid
txid := r.FormValue("txid")
if txid == "" {
logger.Error("no txid")
rlt = pp.MakeErrRes(errors.New("no txid"))
break
}
req := pp.GetRawTxReq{
CoinType: pp.PtrString(cp),
Txid: pp.PtrString(txid),
}
var res pp.GetRawTxRes
if err := sknet.EncryGet(se.GetServAddr(), "/get/rawtx", req, &res); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_ServerError)
break
}
sendJSON(w, res)
return
}
sendJSON(w, rlt)
}
}
示例7: GetUtxos
// GetUtxos get unspent output of specific address.
func GetUtxos(egn engine.Exchange) sknet.HandlerFunc {
return func(c *sknet.Context) error {
var req pp.GetUtxoReq
var rlt *pp.EmptyRes
for {
if err := c.BindJSON(&req); err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
logger.Error(err.Error())
break
}
coin, err := egn.GetCoin(req.GetCoinType())
if err != nil {
rlt = pp.MakeErrRes(err)
logger.Error(err.Error())
break
}
res, err := coin.GetUtxos(req.GetAddresses())
if err != nil {
rlt = pp.MakeErrRes(err)
logger.Error(err.Error())
break
}
return c.SendJSON(&res)
}
return c.Error(rlt)
}
}
示例8: GetCoins
// GetCoins get supported coins from exchange server.
func GetCoins(se Servicer) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
rlt := &pp.EmptyRes{}
for {
a, err := account.GetActive()
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrRes(err)
break
}
req := pp.GetCoinsReq{
Pubkey: pp.PtrString(a.Pubkey),
}
var res pp.CoinsRes
if err := sknet.EncryGet(se.GetServAddr(), "/get/coins", req, &res); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_ServerError)
break
}
sendJSON(w, res)
return
}
sendJSON(w, rlt)
}
}
示例9: GetAddrBalance
// GetAddrBalance get balance of specific address.
func GetAddrBalance(ee engine.Exchange) sknet.HandlerFunc {
return func(c *sknet.Context) error {
var rlt *pp.EmptyRes
for {
req := pp.GetAddrBalanceReq{}
if err := c.BindJSON(&req); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
coin, err := ee.GetCoin(req.GetCoinType())
if err != nil {
rlt = pp.MakeErrRes(err)
logger.Error(err.Error())
break
}
addrs := strings.Split(req.GetAddrs(), ",")
b, err := coin.GetBalance(addrs)
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrRes(err)
break
}
res := pp.GetAddrBalanceRes{
Result: pp.MakeResultWithCode(pp.ErrCode_Success),
Balance: &b,
}
return c.SendJSON(&res)
}
return c.Error(rlt)
}
}
示例10: NewAddress
// NewAddress create address in wallet.
// mode: POST
// url: /api/v1/wallet/:id/address?&id=[:id]
// params:
// id: wallet id.
func NewAddress(se Servicer) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
var rlt *pp.EmptyRes
for {
// get wallet id
wltID := r.FormValue("id")
if wltID == "" {
rlt = pp.MakeErrRes(errors.New("id is required"))
break
}
addrEntries, err := wallet.NewAddresses(wltID, 1)
if err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_ServerError)
break
}
res := struct {
Result *pp.Result
Address string `json:"address"`
}{
Result: pp.MakeResultWithCode(pp.ErrCode_Success),
Address: addrEntries[0].Address,
}
sendJSON(w, &res)
return
}
sendJSON(w, rlt)
}
}
示例11: btcWithdraw
func btcWithdraw(rp *ReqParams) (*pp.WithdrawalRes, *pp.EmptyRes) {
ee := rp.Values["engine"].(engine.Exchange)
acnt := rp.Values["account"].(account.Accounter)
amt := rp.Values["amt"].(uint64)
ct := rp.Values["cointype"].(string)
toAddr := rp.Values["toAddr"].(string)
// verify the toAddr
if _, err := cipher.BitcoinDecodeBase58Address(toAddr); err != nil {
return nil, pp.MakeErrRes(errors.New("invalid bitcoin address"))
}
var success bool
var btcTxRlt *BtcTxResult
var err error
// decrease balance and check if the balance is sufficient.
if err := acnt.DecreaseBalance(ct, amt+ee.GetBtcFee()); err != nil {
return nil, pp.MakeErrRes(err)
}
defer func() {
if !success {
go func() {
if btcTxRlt != nil {
ee.PutUtxos(bitcoin.Type, btcTxRlt.UsingUtxos)
}
acnt.IncreaseBalance(ct, amt+ee.GetBtcFee())
}()
} else {
//TODO: handle the saving failure.
ee.SaveAccount()
}
}()
btcTxRlt, err = createBtcWithdrawTx(ee, amt, toAddr)
if err != nil {
return nil, pp.MakeErrRes(errors.New("failed to create withdrawal tx"))
}
rawtx, err := btcTxRlt.Tx.Serialize()
if err != nil {
return nil, pp.MakeErrRes(errors.New("tx serialize failed"))
}
newTxid, err := bitcoin.BroadcastTx(hex.EncodeToString(rawtx))
if err != nil {
logger.Error(err.Error())
return nil, pp.MakeErrResWithCode(pp.ErrCode_BroadcastTxFail)
}
success = true
if btcTxRlt.ChangeAddr != "" {
logger.Debug("change address:%s", btcTxRlt.ChangeAddr)
ee.WatchAddress(ct, btcTxRlt.ChangeAddr)
}
resp := pp.WithdrawalRes{
Result: pp.MakeResultWithCode(pp.ErrCode_Success),
NewTxid: &newTxid,
}
return &resp, nil
}
示例12: getOrders
func getOrders(se Servicer, tp string) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
rlt := &pp.EmptyRes{}
for {
cp := r.FormValue("coin_pair")
st := r.FormValue("start")
ed := r.FormValue("end")
if cp == "" || st == "" || ed == "" || tp == "" {
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
start, err := strconv.ParseInt(st, 10, 64)
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
end, err := strconv.ParseInt(ed, 10, 64)
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
req := pp.GetOrderReq{
CoinPair: &cp,
Type: pp.PtrString(tp),
Start: &start,
End: &end,
}
var res pp.GetOrderRes
if err := sknet.EncryGet(se.GetServAddr(), "/get/orders", req, &res); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_ServerError)
break
}
sendJSON(w, res)
return
}
sendJSON(w, rlt)
}
}
示例13: GetNewAddress
// GetNewAddress account create new address for depositing.
func GetNewAddress(ee engine.Exchange) sknet.HandlerFunc {
return func(c *sknet.Context) error {
rlt := &pp.EmptyRes{}
for {
req := pp.GetDepositAddrReq{}
if err := c.BindJSON(&req); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
// validate pubkey
pubkey := req.GetPubkey()
if err := validatePubkey(pubkey); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongPubkey)
break
}
at, err := ee.GetAccount(pubkey)
if err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_NotExits)
break
}
ct := req.GetCoinType()
// get the new address for depositing
addr := ee.GetNewAddress(ct)
// add the new address to engin for watching it's utxos.
at.AddDepositAddress(ct, addr)
ee.WatchAddress(ct, addr)
ds := pp.GetDepositAddrRes{
Result: pp.MakeResultWithCode(pp.ErrCode_Success),
CoinType: req.CoinType,
Address: &addr,
}
return c.SendJSON(&ds)
}
return c.Error(rlt)
}
}
示例14: GetOrders
// GetOrders get order list.
func GetOrders(egn engine.Exchange) sknet.HandlerFunc {
return func(c *sknet.Context) error {
rlt := &pp.EmptyRes{}
for {
req := pp.GetOrderReq{}
if err := c.BindJSON(&req); err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
break
}
op, err := order.TypeFromStr(req.GetType())
if err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
logger.Error(err.Error())
break
}
ords, err := egn.GetOrders(req.GetCoinPair(), op, req.GetStart(), req.GetEnd())
if err != nil {
rlt = pp.MakeErrResWithCode(pp.ErrCode_WrongRequest)
logger.Error(err.Error())
break
}
res := pp.GetOrderRes{
CoinPair: req.CoinPair,
Type: req.Type,
Orders: make([]*pp.Order, len(ords)),
}
for i := range ords {
res.Orders[i] = &pp.Order{
Id: &ords[i].ID,
Type: req.Type,
Price: &ords[i].Price,
Amount: &ords[i].Amount,
RestAmt: &ords[i].RestAmt,
CreatedAt: &ords[i].CreatedAt,
}
}
res.Result = pp.MakeResultWithCode(pp.ErrCode_Success)
return c.SendJSON(&res)
}
return c.Error(rlt)
}
}
示例15: Withdraw
// Withdraw transaction.
func Withdraw(se Servicer) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
rlt := &pp.EmptyRes{}
for {
a, err := account.GetActive()
if err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrRes(err)
break
}
cp := r.FormValue("coin_type")
if cp == "" {
err := errors.New("coin_type empty")
logger.Error(err.Error())
rlt = pp.MakeErrRes(err)
break
}
amount := r.FormValue("amount")
if amount == "" {
rlt = pp.MakeErrRes(errors.New("amount empty"))
break
}
toAddr := r.FormValue("toaddr")
if toAddr == "" {
rlt = pp.MakeErrRes(errors.New("toaddr empty"))
break
}
amt, err := strconv.ParseUint(amount, 10, 64)
if err != nil {
rlt = pp.MakeErrRes(err)
break
}
req := pp.WithdrawalReq{
Pubkey: &a.Pubkey,
CoinType: &cp,
Coins: &amt,
OutputAddress: &toAddr,
}
var res pp.WithdrawalRes
if err := sknet.EncryGet(se.GetServAddr(), "/withdrawl", req, &res); err != nil {
logger.Error(err.Error())
rlt = pp.MakeErrResWithCode(pp.ErrCode_ServerError)
break
}
sendJSON(w, res)
return
}
sendJSON(w, rlt)
}
}