本文整理汇总了Golang中github.com/c-darwin/dcoin-go/packages/utils.BinToHex函数的典型用法代码示例。如果您正苦于以下问题:Golang BinToHex函数的具体用法?Golang BinToHex怎么用?Golang BinToHex使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了BinToHex函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: NewUserInit
func (p *Parser) NewUserInit() error {
err := p.GetTxMaps([]map[string]string{{"public_key": "bytes"}, {"sign": "bytes"}})
if err != nil {
return p.ErrInfo(err)
}
p.TxMap["public_key_hex"] = utils.BinToHex(p.TxMap["public_key"])
p.TxMaps.Bytes["public_key_hex"] = utils.BinToHex(p.TxMaps.Bytes["public_key"])
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:9,代码来源:new_user.go
示例2: MessageToAdminInit
func (p *Parser) MessageToAdminInit() error {
fields := []map[string]string{{"encrypted_message": "bytes"}, {"sign": "bytes"}}
err := p.GetTxMaps(fields)
if err != nil {
return p.ErrInfo(err)
}
p.TxMaps.Bytes["encrypted_message"] = utils.BinToHex(p.TxMaps.Bytes["encrypted_message"])
p.TxMap["encrypted_message"] = utils.BinToHex(p.TxMap["encrypted_message"])
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:10,代码来源:message_to_admin.go
示例3: ChangeNodeKeyInit
func (p *Parser) ChangeNodeKeyInit() error {
fields := []map[string]string{{"new_node_public_key": "bytes"}, {"sign": "bytes"}}
err := p.GetTxMaps(fields)
if err != nil {
return p.ErrInfo(err)
}
p.TxMaps.Bytes["new_node_public_key"] = utils.BinToHex(p.TxMaps.Bytes["new_node_public_key"])
p.TxMap["new_node_public_key"] = utils.BinToHex(p.TxMap["new_node_public_key"])
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:11,代码来源:change_node_key.go
示例4: AdminChangePrimaryKeyInit
func (p *Parser) AdminChangePrimaryKeyInit() error {
fields := []map[string]string{{"for_user_id": "int64"}, {"public_key": "bytes"}, {"sign": "bytes"}}
err := p.GetTxMaps(fields)
if err != nil {
return p.ErrInfo(err)
}
p.TxMaps.Bytes["public_key_hex"] = utils.BinToHex(p.TxMaps.Bytes["public_key"])
p.TxMap["public_key_hex"] = utils.BinToHex(p.TxMap["public_key"])
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:11,代码来源:admin_change_primary_key.go
示例5: ChangePrimaryKeyRollback
func (p *Parser) ChangePrimaryKeyRollback() error {
// получим log_id, по которому можно найти данные, которые были до этого
// $log_id всегда больше нуля, т.к. это откат обновления ключа
logId, err := p.Single("SELECT log_id FROM users WHERE user_id = ?", p.TxUserID).Int64()
if err != nil {
return p.ErrInfo(err)
}
// данные, которые восстановим
var public_key_0, public_key_1, public_key_2 []byte
var prev_log_id int64
err = p.QueryRow(p.FormatQuery("SELECT public_key_0, public_key_1, public_key_2, prev_log_id FROM log_users WHERE log_id = ?"), logId).Scan(&public_key_0, &public_key_1, &public_key_2, &prev_log_id)
if err != nil && err != sql.ErrNoRows {
return p.ErrInfo(err)
}
if len(public_key_0) > 0 {
public_key_0 = utils.BinToHex(public_key_0)
}
if len(public_key_1) > 0 {
public_key_1 = utils.BinToHex(public_key_1)
}
if len(public_key_2) > 0 {
public_key_2 = utils.BinToHex(public_key_2)
}
err = p.ExecSql("UPDATE users SET public_key_0 = [hex], public_key_1 = [hex], public_key_2 = [hex], log_id = ? WHERE user_id = ?", public_key_0, public_key_1, public_key_2, prev_log_id, p.TxUserID)
if err != nil {
return p.ErrInfo(err)
}
// подчищаем _log
err = p.ExecSql("DELETE FROM log_users WHERE log_id = ?", logId)
if err != nil {
return p.ErrInfo(err)
}
p.rollbackAI("log_users", 1)
// проверим, не наш ли это user_id
myUserId, _, myPrefix, _, err := p.GetMyUserId(p.TxUserID)
if err != nil {
return err
}
if p.TxUserID == myUserId {
// обновим статус в нашей локальной табле.
err = p.ExecSql("UPDATE "+myPrefix+"my_keys SET status = 'my_pending', block_id = 0, time = 0 WHERE hex(public_key) = ? AND status = 'approved' AND block_id = ?", p.newPublicKeysHex[0], p.BlockData.BlockId)
if err != nil {
return p.ErrInfo(err)
}
}
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:52,代码来源:change_primary_key.go
示例6: NewMinerInit
func (p *Parser) NewMinerInit() error {
var fields []map[string]string
if p.BlockData != nil && p.BlockData.BlockId < 250900 {
fields = []map[string]string{{"race": "int64"}, {"country": "int64"}, {"latitude": "float64"}, {"longitude": "float64"}, {"http_host": "string"}, {"face_coords": "string"}, {"profile_coords": "string"}, {"face_hash": "string"}, {"profile_hash": "string"}, {"video_type": "string"}, {"video_url_id": "string"}, {"node_public_key": "bytes"}, {"sign": "bytes"}}
} else {
fields = []map[string]string{{"race": "int64"}, {"country": "int64"}, {"latitude": "float64"}, {"longitude": "float64"}, {"http_host": "string"}, {"tcp_host": "string"}, {"face_coords": "string"}, {"profile_coords": "string"}, {"face_hash": "string"}, {"profile_hash": "string"}, {"video_type": "string"}, {"video_url_id": "string"}, {"node_public_key": "bytes"}, {"sign": "bytes"}}
}
err := p.GetTxMaps(fields)
if err != nil {
return p.ErrInfo(err)
}
p.TxMap["node_public_key"] = utils.BinToHex(p.TxMap["node_public_key"])
p.TxMaps.Bytes["node_public_key"] = utils.BinToHex(p.TxMaps.Bytes["node_public_key"])
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:15,代码来源:new_miner.go
示例7: CashRequestInFront
/* не забываем, что cash_request_OUT_front проверяет формат amount,
* можно ли делать запрос указанному юзеру, есть ли у юзера
* обещанные суммы на сумму amount, есть ли нужное кол-во DC у отправителя,
* является ли отправитель майнером
*
* */
func (p *Parser) CashRequestInFront() error {
err := p.generalCheck()
if err != nil {
return p.ErrInfo(err)
}
// code может быть чем угодно, т.к. отправитель шлет в сеть лишь хэш
// нигде, кроме cash_request_in_front, code не используется
// if ( !check_input_data ($this->tx_data['code'], 'cash_code') )
// return 'cash_request_in_front code';
verifyData := map[string]string{"cash_request_id": "bigint"}
err = p.CheckInputData(verifyData)
if err != nil {
return p.ErrInfo(err)
}
var to_user_id, cTime int64
var status string
var hash_code []byte
err = p.QueryRow(p.FormatQuery("SELECT to_user_id, status, hash_code, time FROM cash_requests WHERE id = ?"), p.TxMaps.Int64["cash_request_id"]).Scan(&to_user_id, &status, &hash_code, &cTime)
if err != nil && err != sql.ErrNoRows {
return p.ErrInfo(err)
}
// ID cash_requests юзер указал сам, значит это может быть случайное число.
// проверим, является получателем наш юзер
if to_user_id != p.TxUserID {
return p.ErrInfo("to_user_id!=user_id")
}
// должно быть pending
if status != "pending" {
return p.ErrInfo("status!=pending")
}
// проверим код
if !bytes.Equal(utils.DSha256(p.TxMaps.String["code"]), utils.BinToHex(hash_code)) {
return p.ErrInfo("code!=hash_code")
}
var txTime int64
if p.BlockData != nil { // тр-ия пришла в блоке
txTime = p.BlockData.Time
} else {
txTime = time.Now().Unix() // просто на всякий случай небольшой запас
}
// запрос может быть принят, только если он был отправлен не позднее чем через cash_request_time сек назад
if cTime < txTime-p.Variables.Int64["cash_request_time"] {
return p.ErrInfo(fmt.Sprintf("%d < %d - %d", cTime, txTime, p.Variables.Int64["cash_request_time"]))
}
forSign := fmt.Sprintf("%s,%s,%s,%s,%s", p.TxMap["type"], p.TxMap["time"], p.TxMap["user_id"], p.TxMap["cash_request_id"], p.TxMap["code"])
CheckSignResult, err := utils.CheckSign(p.PublicKeys, forSign, p.TxMap["sign"], false)
if err != nil {
return p.ErrInfo(err)
}
if !CheckSignResult {
return p.ErrInfo("incorrect sign")
}
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:66,代码来源:cash_request_in.go
示例8: EncryptChatMessage
func (c *Controller) EncryptChatMessage() (string, error) {
var err error
c.r.ParseForm()
receiver := c.r.FormValue("receiver")
message := c.r.FormValue("message")
if len(message) > 5120 {
return "", errors.New("incorrect message")
}
publicKey, err := c.Single("SELECT public_key_0 FROM users WHERE user_id = ?", receiver).Bytes()
if err != nil {
return "", utils.ErrInfo(err)
}
if len(publicKey) > 0 {
pub, err := utils.BinToRsaPubKey(publicKey)
if err != nil {
return "", utils.ErrInfo(err)
}
enc_, err := rsa.EncryptPKCS1v15(rand.Reader, pub, []byte(message))
if err != nil {
return "", utils.ErrInfo(err)
}
return utils.JsonAnswer(string(utils.BinToHex(enc_)), "success").String(), nil
} else {
return utils.JsonAnswer("Incorrect user_id", "error").String(), nil
}
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:32,代码来源:encrypt_chat_message.go
示例9: ChangeNodeKey
func (p *Parser) ChangeNodeKey() error {
// Всегда есть, что логировать, т.к. это обновление ключа
logData, err := p.OneRow("SELECT * FROM miners_data WHERE user_id = ?", p.TxUserID).String()
if err != nil {
return p.ErrInfo(err)
}
nodePublicKeyHex := utils.BinToHex([]byte(logData["node_public_key"]))
logId, err := p.ExecSqlGetLastInsertId("INSERT INTO log_miners_data ( node_public_key, block_id, prev_log_id ) VALUES ( [hex], ?, ? )", "log_id", nodePublicKeyHex, p.BlockData.BlockId, logData["log_id"])
if err != nil {
return p.ErrInfo(err)
}
err = p.ExecSql("UPDATE miners_data SET node_public_key = [hex], log_id = ? WHERE user_id = ?", p.TxMaps.Bytes["new_node_public_key"], logId, p.TxUserID)
if err != nil {
return p.ErrInfo(err)
}
// проверим, не наш ли это user_id
myUserId, myBlockId, myPrefix, _, err := p.GetMyUserId(p.TxMaps.Int64["user_id"])
if err != nil {
return err
}
if p.TxUserID == myUserId && myBlockId <= p.BlockData.BlockId {
// обновим статус в нашей локальной табле.
err = p.ExecSql("UPDATE "+myPrefix+"my_node_keys SET status = 'approved', block_id = ?, time = ? WHERE hex(public_key) = ? AND status = 'my_pending'", p.BlockData.BlockId, p.BlockData.Time, p.TxMaps.Bytes["new_node_public_key"])
if err != nil {
return p.ErrInfo(err)
}
}
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:33,代码来源:change_node_key.go
示例10: MoneyBackRequestFront
func (p *Parser) MoneyBackRequestFront() error {
err := p.generalCheck()
if err != nil {
return p.ErrInfo(err)
}
verifyData := map[string]string{"order_id": "bigint", "seller_enc_text": "comment", "arbitrator0_enc_text": "comment", "arbitrator1_enc_text": "comment", "arbitrator2_enc_text": "comment", "arbitrator3_enc_text": "comment", "arbitrator4_enc_text": "comment"}
err = p.CheckInputData(verifyData)
if err != nil {
return p.ErrInfo(err)
}
var txTime int64
if p.BlockData != nil { // тр-ия пришла в блоке
txTime = p.BlockData.Time
} else { // голая тр-ия
txTime = time.Now().Unix() - 30 // просто на всякий случай небольшой запас
}
// проверим, есть ли такой ордер, не был ли ранее запрос, точно ли покупатель наш юзер
orderId, err := p.Single("SELECT id FROM orders WHERE id = ? AND status = 'normal' AND end_time > ? AND buyer = ?", p.TxMaps.Int64["order_id"], txTime, p.TxUserID).Int64()
if err != nil {
return p.ErrInfo(err)
}
if orderId == 0 {
return p.ErrInfo("orderId==0")
}
forSign := ""
if p.BlockData != nil && p.BlockData.BlockId < 197115 {
forSign = fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s", p.TxMap["type"], p.TxMap["time"], p.TxMap["user_id"], p.TxMap["order_id"], p.TxMap["arbitrator0_enc_text"], p.TxMap["arbitrator1_enc_text"], p.TxMap["arbitrator2_enc_text"], p.TxMap["arbitrator3_enc_text"], p.TxMap["arbitrator4_enc_text"], p.TxMap["seller_enc_text"])
} else {
encData := make(map[string]string)
for i := 0; i < 5; i++ {
iStr := utils.IntToStr(i)
encData["arbitrator"+iStr+"_enc_text"] = string(utils.BinToHex(p.TxMap["arbitrator"+iStr+"_enc_text"]))
if encData["arbitrator"+iStr+"_enc_text"] == "00" {
encData["arbitrator"+iStr+"_enc_text"] = "0"
}
}
forSign = fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s,%s,%s", p.TxMap["type"], p.TxMap["time"], p.TxMap["user_id"], p.TxMap["order_id"], encData["arbitrator0_enc_text"], encData["arbitrator1_enc_text"], encData["arbitrator2_enc_text"], encData["arbitrator3_enc_text"], encData["arbitrator4_enc_text"], utils.BinToHex(p.TxMap["seller_enc_text"]))
}
CheckSignResult, err := utils.CheckSign(p.PublicKeys, forSign, p.TxMap["sign"], false)
if err != nil {
return p.ErrInfo(err)
}
if !CheckSignResult {
return p.ErrInfo("incorrect sign")
}
err = p.limitRequest(consts.LIMIT_MONEY_BACK_REQUEST, "money_back_request", consts.LIMIT_MONEY_BACK_REQUEST_PERIOD)
if err != nil {
return p.ErrInfo(err)
}
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:59,代码来源:money_back_request.go
示例11: ChangeKeyActiveInit
func (p *Parser) ChangeKeyActiveInit() error {
fields := []map[string]string{{"secret": "bytes"}, {"sign": "bytes"}}
err := p.GetTxMaps(fields)
if err != nil {
return p.ErrInfo(err)
}
p.TxMaps.String["secret_hex"] = string(utils.BinToHex(p.TxMaps.Bytes["secret"]))
if p.TxMaps.String["secret_hex"] == "30" {
p.TxMaps.Int64["active"] = 0
} else {
p.TxMaps.Int64["active"] = 1
}
p.TxMaps.String["secret_hex"] = string(utils.BinToHex(p.TxMaps.Bytes["secret"]))
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:17,代码来源:change_key_active.go
示例12: SendDcInit
func (p *Parser) SendDcInit() error {
var fields []map[string]string
if p.BlockData != nil && p.BlockData.BlockId <= consts.ARBITRATION_BLOCK_START {
fields = []map[string]string{{"to_user_id": "int64"}, {"currency_id": "int64"}, {"amount": "float64"}, {"commission": "float64"}, {"comment": "string"}, {"sign": "bytes"}}
} else {
fields = []map[string]string{{"to_user_id": "int64"}, {"currency_id": "int64"}, {"amount": "float64"}, {"commission": "float64"}, {"arbitrator0": "int64"}, {"arbitrator1": "int64"}, {"arbitrator2": "int64"}, {"arbitrator3": "int64"}, {"arbitrator4": "int64"}, {"arbitrator0_commission": "float64"}, {"arbitrator1_commission": "float64"}, {"arbitrator2_commission": "float64"}, {"arbitrator3_commission": "float64"}, {"arbitrator4_commission": "float64"}, {"comment": "string"}, {"sign": "bytes"}}
}
err := p.GetTxMaps(fields)
if err != nil {
return p.ErrInfo(err)
}
p.TxMaps.Bytes["hash_hex"] = utils.BinToHex(p.TxMaps.Bytes["hash"])
p.TxMaps.Int64["from_user_id"] = p.TxMaps.Int64["user_id"]
p.TxMap["hash_hex"] = utils.BinToHex(p.TxMap["hash"])
p.TxMap["from_user_id"] = p.TxMap["user_id"]
if p.TxMaps.String["comment"] == "null" {
p.TxMaps.String["comment"] = ""
p.TxMap["comment"] = []byte("")
}
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:22,代码来源:send_dc.go
示例13: CheckSetupPassword
func (c *Controller) CheckSetupPassword() (string, error) {
c.r.ParseForm()
password, err := c.Single(`SELECT setup_password FROM config WHERE setup_password = ?`, utils.DSha256(c.r.FormValue("password"))).String()
if err != nil {
return "", err
}
if len(password) > 0 && !c.Community {
userId, err := c.GetMyUserId("")
if err != nil {
return "", err
}
publicKey, err := c.GetUserPublicKey(userId)
if err != nil {
return "", err
}
c.sess.Set("user_id", userId)
c.sess.Set("public_key", string(utils.BinToHex(publicKey)))
log.Debug("public_key check: %s", string(utils.BinToHex(publicKey)))
return "ok", nil
}
return "", nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:24,代码来源:check_setup_password.go
示例14: EDataBaseDump
func (c *Controller) EDataBaseDump() (string, error) {
if !c.NodeAdmin || c.SessRestricted != 0 {
return "", utils.ErrInfo(errors.New("Permission denied"))
}
allTables, err := c.GetAllTables()
if err != nil {
return "", utils.ErrInfo(err)
}
c.r.ParseForm()
mainMap := make(map[string][]map[string]string)
for _, table := range allTables {
re := regexp.MustCompile("^e_")
match := re.FindStringSubmatch(table)
if len(match) > 0 {
data, err := c.GetAll(`SELECT * FROM `+table, -1)
if err != nil {
return "", utils.ErrInfo(err)
}
for k, arr := range data {
for name, value := range arr {
if ok, _ := regexp.MatchString("(tx_hash)", name); ok {
data[k][name] = string(utils.BinToHex([]byte(value)))
}
}
}
mainMap[table] = data
}
}
jsonData, _ := json.Marshal(mainMap)
log.Debug(string(jsonData))
c.w.Header().Set("Content-Type", "text/plain")
c.w.Header().Set("Content-Length", utils.IntToStr(len(jsonData)))
t := time.Unix(utils.Time(), 0)
c.w.Header().Set("Content-Disposition", `attachment; filename="dcoin_e_backup-`+t.Format(c.TimeFormat)+`.txt`)
if _, err := c.w.Write(jsonData); err != nil {
return "", utils.ErrInfo(errors.New("unable to write text"))
}
return "", nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:46,代码来源:e_database_dump.go
示例15: ChangeNodeKeyRollback
func (p *Parser) ChangeNodeKeyRollback() error {
// получим log_id, по которому можно найти данные, которые были до этого
// $log_id всегда больше нуля, т.к. это откат обновления ключа
logId, err := p.Single("SELECT log_id FROM miners_data WHERE user_id = ?", p.TxUserID).Int64()
if err != nil {
return p.ErrInfo(err)
}
// данные, которые восстановим
data, err := p.OneRow("SELECT node_public_key, prev_log_id FROM log_miners_data WHERE log_id = ?", logId).String()
if err != nil {
return p.ErrInfo(err)
}
nodePublicKeyHex := utils.BinToHex([]byte(data["node_public_key"]))
err = p.ExecSql("UPDATE miners_data SET node_public_key =[hex], log_id = ? WHERE user_id = ?", nodePublicKeyHex, data["prev_log_id"], p.TxUserID)
if err != nil {
return p.ErrInfo(err)
}
// подчищаем _log
err = p.ExecSql("DELETE FROM log_miners_data WHERE log_id = ?", logId)
if err != nil {
return p.ErrInfo(err)
}
err = p.rollbackAI("log_miners_data", 1)
if err != nil {
return p.ErrInfo(err)
}
// проверим, не наш ли это user_id
myUserId, _, myPrefix, _, err := p.GetMyUserId(p.TxMaps.Int64["user_id"])
if err != nil {
return err
}
if p.TxUserID == myUserId {
// обновим статус в нашей локальной табле.
err = p.ExecSql("UPDATE "+myPrefix+"my_node_keys SET status = 'my_pending', block_id = 0, time = 0 WHERE hex(public_key) = ? AND status = 'approved' AND block_id = ?", p.TxMaps.Bytes["new_node_public_key"], p.BlockData.BlockId)
if err != nil {
return p.ErrInfo(err)
}
}
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:44,代码来源:change_node_key.go
示例16: PoolAdminLogin
func (c *Controller) PoolAdminLogin() (string, error) {
if !c.PoolAdmin {
return "", utils.ErrInfo(errors.New("access denied"))
}
c.r.ParseForm()
userId := int64(utils.StrToFloat64(c.Parameters["userId"]))
publicKey, err := c.GetUserPublicKey(userId)
if err != nil {
return "", utils.ErrInfo(err)
}
c.sess.Set("user_id", userId)
c.sess.Set("public_key", string(utils.BinToHex(publicKey)))
TemplateStr, err := makeTemplate("pool_admin_login", "poolAdminLogin", &poolAdminPage{})
if err != nil {
return "", utils.ErrInfo(err)
}
return TemplateStr, nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:21,代码来源:pool_admin_login.go
示例17: ChangePrimaryKeyInit
func (p *Parser) ChangePrimaryKeyInit() error {
var err error
fields := []string{"bin_public_keys", "sign"}
p.TxMap, err = p.GetTxMap(fields)
if err != nil {
return p.ErrInfo(err)
}
// в 1 new_public_keys может быть от 1 до 3-х ключей
i := 0
bin_public_keys := p.TxMap["bin_public_keys"]
for {
length := utils.DecodeLength(&bin_public_keys)
pKey := utils.BytesShift(&bin_public_keys, length)
p.newPublicKeysHex[i] = utils.BinToHex(pKey)
if len(bin_public_keys) == 0 || i > 1 {
break
}
i++
}
return nil
}
开发者ID:dzyk,项目名称:dcoin-go,代码行数:22,代码来源:change_primary_key.go
示例18: SendDcFront
func (p *Parser) SendDcFront() error {
err := p.generalCheck()
if err != nil {
return p.ErrInfo(err)
}
verifyData := map[string]string{"from_user_id": "bigint", "to_user_id": "bigint", "currency_id": "bigint", "amount": "amount", "commission": "amount", "comment": "comment"}
err = p.CheckInputData(verifyData)
if err != nil {
return p.ErrInfo(err)
}
if p.TxMaps.Float64["amount"] < 0.01 { // 0.01 - минимальная сумма
return p.ErrInfo("amount")
}
// проверим, существует ли такая валюта в таблиуе DC-валют
checkCurrency, err := p.CheckCurrency(p.TxMaps.Int64["currency_id"])
if !checkCurrency {
// если нет, то проверяем список CF-валют
checkCurrency, err := p.CheckCurrencyCF(p.TxMaps.Int64["currency_id"])
if err != nil {
return p.ErrInfo(err)
}
if !checkCurrency {
return p.ErrInfo("currency_id")
}
}
nodeCommission, err := p.getMyNodeCommission(p.TxMaps.Int64["currency_id"], p.TxUserID, p.TxMaps.Float64["amount"])
if err != nil {
return p.ErrInfo(err)
}
// проверим, удовлетворяет ли нас комиссия, которую предлагает юзер
if p.TxMaps.Float64["commission"] < nodeCommission {
return p.ErrInfo(fmt.Sprintf("commission %v<%v", p.TxMaps.Float64["commission"], nodeCommission))
}
if p.BlockData != nil && p.BlockData.BlockId <= consts.ARBITRATION_BLOCK_START {
for i := 0; i < 5; i++ {
p.TxMaps.Float64["arbitrator"+utils.IntToStr(i)+"_commission"] = 0 // для check_sender_money
}
forSign := fmt.Sprintf("%s,%s,%s,%s,%s,%s,%s,%s", p.TxMap["type"], p.TxMap["time"], p.TxMap["user_id"], p.TxMap["to_user_id"], p.TxMap["amount"], p.TxMap["commission"], utils.BinToHex(p.TxMap["comment"]), p.TxMap["currency_id"])
CheckSignResult, err := utils.CheckSign(p.PublicKeys, forSign, p.TxMap["sign"], false)
if err != nil {
return p.ErrInfo(err)
}
if !CheckSignResult {
return p.ErrInfo("incorrect sign")
}
} else {
dupArray := make(map[int64]int64)
for i := 0; i < 5; i++ {
arbitrator__commission := "arbitrator" + utils.IntToStr(i) + "_commission"
arbitrator_ := "arbitrator" + utils.IntToStr(i)
if !utils.CheckInputData(p.TxMap[arbitrator__commission], "amount") {
return p.ErrInfo("arbitrator_commission")
}
if !utils.CheckInputData(p.TxMap[arbitrator_], "bigint") {
return p.ErrInfo("arbitrator")
}
// если указал ID арбитра, то должна быть комиссия для него
if p.TxMaps.Int64[arbitrator_] > 0 && p.TxMaps.Float64[arbitrator__commission] < 0.01 {
return p.ErrInfo("arbitrator_commission")
}
// на всяк случай не даем арбитрам возможность быть арбитрами самим себе
if p.TxMaps.Int64[arbitrator_] == p.TxUserID {
return p.ErrInfo("arbitrator = user_id")
}
if p.TxMaps.Int64[arbitrator_] > 0 {
dupArray[utils.BytesToInt64(p.TxMap[arbitrator_])]++
if dupArray[utils.BytesToInt64(p.TxMap[arbitrator_])] > 1 {
return p.ErrInfo("doubles")
}
}
if p.TxMaps.Int64[arbitrator_] > 0 {
arbitrator := p.TxMap[arbitrator_]
// проверим, является ли арбитром указанный user_id
arbitratorConditionsJson, err := p.Single("SELECT conditions FROM arbitrator_conditions WHERE user_id = ?", utils.BytesToInt64(arbitrator)).Bytes()
if err != nil {
return p.ErrInfo(err)
}
arbitratorConditionsMap := make(map[string][5]string)
err = json.Unmarshal(arbitratorConditionsJson, &arbitratorConditionsMap)
// арбитр к этому моменту мог передумать и убрать свои условия, уйдя из арбитров для новых сделок поставив [0] что вызовет тут ошибку
if err != nil {
log.Debug("arbitratorConditionsJson", arbitratorConditionsJson)
return p.ErrInfo(err)
}
// проверим, работает ли выбранный арбитр с валютой данной сделки
var checkCurrency int64
if p.TxMaps.Int64["currency_id"] > 1000 {
checkCurrency = 1000
} else {
checkCurrency = p.TxMaps.Int64["currency_id"]
//.........这里部分代码省略.........
开发者ID:dzyk,项目名称:dcoin-go,代码行数:101,代码来源:send_dc.go
示例19: SendDc
func (p *Parser) SendDc() error {
// нужно отметить в log_time_money_orders, что тр-ия прошла в блок
err := p.ExecSql("UPDATE log_time_money_orders SET del_block_id = ? WHERE hex(tx_hash) = ?", p.BlockData.BlockId, p.TxHash)
if err != nil {
return p.ErrInfo(err)
}
// 1 возможно нужно обновить таблицу points_status
err = p.pointsUpdateMain(p.BlockData.UserId)
if err != nil {
return p.ErrInfo(err)
}
// 2
err = p.pointsUpdateMain(p.TxMaps.Int64["from_user_id"])
if err != nil {
return p.ErrInfo(err)
}
// 3
err = p.pointsUpdateMain(p.TxMaps.Int64["to_user_id"])
if err != nil {
return p.ErrInfo(err)
}
commission := p.TxMaps.Float64["commission"]
var arbitration_days_refund int64
var seller_hold_back_pct float64
var arbitrators bool
if p.BlockData.BlockId > consts.ARBITRATION_BLOCK_START {
// на какой период манибека согласен продавец
err := p.QueryRow(p.FormatQuery("SELECT arbitration_days_refund, seller_hold_back_pct FROM users WHERE user_id = ?"), p.TxMaps.Int64["to_user_id"]).Scan(&arbitration_days_refund, &seller_hold_back_pct)
if err != nil && err != sql.ErrNoRows {
return p.ErrInfo(err)
}
if arbitration_days_refund > 0 {
for i := 0; i < 5; i++ {
iStr := utils.IntToStr(i)
if p.TxMaps.Int64["arbitrator"+iStr] > 0 && p.TxMaps.Float64["arbitrator"+iStr+"_commission"] >= 0.01 {
// нужно учесть комиссию арбитра
commission += p.TxMaps.Float64["arbitrator"+iStr+"_commission"]
arbitrators = true
}
}
}
}
// 4 обновим сумму на кошельке отправителя, залогировав предыдущее значение
err = p.updateSenderWallet(p.TxMaps.Int64["from_user_id"], p.TxMaps.Int64["currency_id"], p.TxMaps.Float64["amount"], commission, "from_user", p.TxMaps.Int64["to_user_id"], p.TxMaps.Int64["to_user_id"], string(utils.BinToHex(p.TxMap["comment"])), "encrypted")
if err != nil {
return p.ErrInfo(err)
}
log.Debug("SendDC updateRecipientWallet")
// 5 обновим сумму на кошельке получателю
err = p.updateRecipientWallet(p.TxMaps.Int64["to_user_id"], p.TxMaps.Int64["currency_id"], p.TxMaps.Float64["amount"], "from_user", p.TxMaps.Int64["from_user_id"], p.TxMaps.String["comment"], "encrypted", true)
if err != nil {
return p.ErrInfo(err)
}
// 6 теперь начисляем комиссию майнеру, который этот блок сгенерил
if p.TxMaps.Float64["commission"] >= 0.01 {
err = p.updateRecipientWallet(p.BlockData.UserId, p.TxMaps.Int64["currency_id"], p.TxMaps.Float64["commission"], "node_commission", p.BlockData.BlockId, "", "encrypted", true)
if err != nil {
return p.ErrInfo(err)
}
}
log.Debug("p.BlockData.BlockId", p.BlockData.BlockId)
log.Debug("consts.ARBITRATION_BLOCK_START", consts.ARBITRATION_BLOCK_START)
if p.BlockData.BlockId > consts.ARBITRATION_BLOCK_START {
// если продавец не согласен на арбитраж, то $arbitration_days_refund будет равно 0
log.Debug("arbitration_days_refund", arbitration_days_refund)
log.Debug("arbitrators", arbitrators)
if arbitration_days_refund > 0 && arbitrators {
holdBackAmount := math.Floor(utils.Round(p.TxMaps.Float64["amount"]*(seller_hold_back_pct/100), 3)*100) / 100
if holdBackAmount < 0.01 {
holdBackAmount = 0.01
}
orderId, err := p.ExecSqlGetLastInsertId("INSERT INTO orders ( time, buyer, seller, arbitrator0, arbitrator1, arbitrator2, arbitrator3, arbitrator4, amount, hold_back_amount, currency_id, block_id, end_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )", "id", p.BlockData.Time, p.TxMaps.Int64["from_user_id"], p.TxMaps.Int64["to_user_id"], p.TxMaps.Int64["arbitrator0"], p.TxMaps.Int64["arbitrator1"], p.TxMaps.Int64["arbitrator2"], p.TxMaps.Int64["arbitrator3"], p.TxMaps.Int64["arbitrator4"], p.TxMaps.Float64["amount"], holdBackAmount, p.TxMaps.Int64["currency_id"], p.BlockData.BlockId, (p.BlockData.Time + arbitration_days_refund*86400))
if err != nil {
return p.ErrInfo(err)
}
// начисляем комиссию арбитрам
for i := 0; i < 5; i++ {
iStr := utils.IntToStr(i)
log.Debug("arbitrator_commission "+iStr, p.TxMaps.Float64["arbitrator"+iStr+"_commission"])
if p.TxMaps.Int64["arbitrator"+iStr] > 0 && p.TxMaps.Float64["arbitrator"+iStr+"_commission"] >= 0.01 {
log.Debug("updateRecipientWallet")
err = p.updateRecipientWallet(p.TxMaps.Int64["arbitrator"+iStr], p.TxMaps.Int64["currency_id"], p.TxMaps.Float64["arbitrator"+iStr+"_commission"], "arbitrator_commission", orderId, "", "encrypted", true)
if err != nil {
return p.ErrInfo(err)
}
}
}
}
}
// отмечаем данную транзакцию в буфере как отработанную и ставим в очередь на удаление
err = p.ExecSql("UPDATE wallets_buffer SET del_block_id = ? WHERE hex(hash) = ?", p.BlockData.BlockId, p.TxHash)
if err != nil {
return p.ErrInfo(err)
//.........这里部分代码省略.........
开发者ID:dzyk,项目名称:dcoin-go,代码行数:101,代码来源:send_dc.go
示例20: Exchange
//.........这里部分代码省略.........
if err != nil {
rows.Close()
if d.dPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
p := new(dcparser.Parser)
p.DCDB = d.DCDB
p.BinaryData = binaryData
p.ParseDataLite()
for _, txMap := range p.TxMapArr {
// пропускаем все ненужные тр-ии
if utils.BytesToInt64(txMap["type"]) != utils.TypeInt("SendDc") {
continue
}
log.Debug("md5hash %s", txMap["md5hash"])
// если что-то случится с таблой my_dc_transactions, то все ввода на биржу будут зачислены по новой
// поэтому нужно проверять e_adding_funds
exists, err := d.Single(`SELECT id FROM e_adding_funds WHERE hex(tx_hash) = ?`, string(txMap["md5hash"])).Int64()
if err != nil {
rows.Close()
if d.dPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
log.Debug("exists %d", exists)
if exists != 0 {
continue
}
log.Debug("user_id = %d / typeId = %d / currency_id = %d / currencyId = %d / amount = %f / amount = %f / comment = %s / comment = %s / to_user_id = %d / toUserId = %d ", utils.BytesToInt64(txMap["user_id"]), typeId, utils.BytesToInt64(txMap["currency_id"]), currencyId, utils.BytesToFloat64(txMap["amount"]), amount, string(utils.BinToHex(txMap["comment"])), comment, utils.BytesToInt64(txMap["to_user_id"]), toUserId)
// сравнение данных из таблы my_dc_transactions с тем, что в блоке
if utils.BytesToInt64(txMap["user_id"]) == typeId && utils.BytesToInt64(txMap["currency_id"]) == currencyId && utils.BytesToFloat64(txMap["amount"]) == amount && string(utils.BinToHex(txMap["comment"])) == comment && utils.BytesToInt64(txMap["to_user_id"]) == toUserId {
decryptedComment := comment
if commentStatus == "encrypted" {
// расшифруем коммент
block, _ := pem.Decode([]byte(nodePrivateKey))
if block == nil || block.Type != "RSA PRIVATE KEY" {
rows.Close()
if d.dPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
private_key, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
rows.Close()
if d.dPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
decryptedComment_, err := rsa.DecryptPKCS1v15(rand.Reader, private_key, utils.HexToBin(comment))
if err != nil {
rows.Close()
if d.dPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
decryptedComment = string(decryptedComment_)
// запишем расшифрованный коммент, чтобы потом можно было найти перевод в ручном режиме
开发者ID:dzyk,项目名称:dcoin-go,代码行数:67,代码来源:exchange.go
注:本文中的github.com/c-darwin/dcoin-go/packages/utils.BinToHex函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论