本文整理汇总了Golang中github.com/c-darwin/dcoin-go/packages/utils.DecToBin函数的典型用法代码示例。如果您正苦于以下问题:Golang DecToBin函数的具体用法?Golang DecToBin怎么用?Golang DecToBin使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DecToBin函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: check
func check(host string, userId int64) *answerType {
/*tcpAddr, err := net.ResolveTCPAddr("tcp", host)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return &answerType{userId: userId, answer: 0}
}
conn, err := net.DialTCP("tcp", nil, tcpAddr)*/
conn, err := net.DialTimeout("tcp", host, 5*time.Second)
if err != nil {
log.Debug("%v", utils.ErrInfo(err))
return &answerType{userId: userId, answer: 0}
}
defer conn.Close()
conn.SetReadDeadline(time.Now().Add(consts.READ_TIMEOUT * time.Second))
conn.SetWriteDeadline(time.Now().Add(consts.WRITE_TIMEOUT * time.Second))
// вначале шлем тип данных, чтобы принимающая сторона могла понять, как именно надо обрабатывать присланные данные
_, err = conn.Write(utils.DecToBin(5, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return &answerType{userId: userId, answer: 0}
}
// в 5-и байтах пишем userID, чтобы проверить, верный ли у него нодовский ключ, т.к. иначе ему нельзя слать зашифрованные данные
_, err = conn.Write(utils.DecToBin(userId, 5))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return &answerType{userId: userId, answer: 0}
}
// ответ всегда 1 байт. 0 или 1
answer := make([]byte, 1)
_, err = conn.Read(answer)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return &answerType{userId: userId, answer: 0}
}
// создадим канал для чата
if utils.BinToDec(answer) == 1 {
}
log.Debug("host: %v / answer: %v / userId: %v", host, answer, userId)
return &answerType{userId: userId, answer: utils.BinToDec(answer)}
}
示例2: Type9
func (t *TcpServer) Type9() {
/* Делаем запрос на указанную ноду, чтобы получить оттуда номер макс. блока
* запрос шлет демон blocksCollection
*/
// размер данных
buf := make([]byte, 4)
_, err := t.Conn.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
size := utils.BinToDec(buf)
if size < 10485760 {
// сами данные
binaryData := make([]byte, size)
/*_, err = t.Conn.Read(binaryData)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}*/
//binaryData, err = ioutil.ReadAll(t.Conn)
_, err = io.ReadFull(t.Conn, binaryData)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
//blockId := utils.BinToDecBytesShift(&binaryData, 4)
host, err := utils.ProtectedCheckRemoteAddrAndGetHost(&binaryData, t.Conn)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// шлем данные указанному хосту
conn2, err := utils.TcpConn(host)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
defer conn2.Close()
// шлем тип данных
_, err = conn2.Write(utils.DecToBin(10, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// в ответ получаем номер блока
blockIdBin := make([]byte, 4)
_, err = conn2.Read(blockIdBin)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// и возвращаем номер блока демону, который этот запрос прислал
_, err = t.Conn.Write(blockIdBin)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
}
}
示例3: checkConf
func checkConf(host string, blockId int64) string {
log.Debug("host: %v", host)
/*tcpAddr, err := net.ResolveTCPAddr("tcp", host)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return "0"
}
conn, err := net.DialTCP("tcp", nil, tcpAddr)*/
conn, err := net.DialTimeout("tcp", host, 5*time.Second)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return "0"
}
defer conn.Close()
conn.SetReadDeadline(time.Now().Add(consts.READ_TIMEOUT * time.Second))
conn.SetWriteDeadline(time.Now().Add(consts.WRITE_TIMEOUT * time.Second))
// вначале шлем тип данных, чтобы принимающая сторона могла понять, как именно надо обрабатывать присланные данные
_, err = conn.Write(utils.DecToBin(4, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return "0"
}
// в 4-х байтах пишем ID блока, хэш которого хотим получить
size := utils.DecToBin(blockId, 4)
_, err = conn.Write(size)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return "0"
}
// ответ всегда 32 байта
hash := make([]byte, 32)
_, err = conn.Read(hash)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return "0"
}
return string(hash)
}
示例4: TestDisseminator
func TestDisseminator(t *testing.T) {
defer func() {
if r := recover(); r != nil {
log.Error("daemon Recovered", r)
panic(r)
}
}()
dir, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
t.Error(err)
}
fmt.Println(dir)
/*configIni_, err := config.NewConfig("ini", "/home/z/IdeaProjects/src/github.com/c-darwin/dcoin-go/config.ini")
if err != nil {
t.Error("%v", utils.ErrInfo(err))
}
configIni, err := configIni_.GetSection("default")
if err != nil {
t.Error("%v", utils.ErrInfo(err))
}*/
host := "pool.dcoin.club:8088"
userId := int64(2)
myUserId := int64(4)
nodePublicKey := utils.HexToBin([]byte("30820122300d06092a864886f70d01010105000382010f003082010a0282010100b85bf8eb06d70e9f28961725ec04957d9c42db127bb788623b5063b7152bdf0df9f1af08a3cdb89f354fe86c43f9f071614b75ccee04ee9e61c749f1800870ad0ada6fc9dbcb928b2049376a06ac6754f6d2832a865e2e4bcfbd1451deb6d2c1ce6a0000701bdce2ec5c20da33ea427a58e9d9bd2807e0c712676593231410b6b0a35b392693cd62e33378987db36b4549ef5f65b172afd7cca9daed6d23e5239d966de9f31a83df4b59cb67ac5c1a816ee633cfcd3a87897b6a9053f3bd4131a403e4a20f301eea5efd31803cdf468663a605cdea96cf6b1cb698b7bb38ab5feb93b68972589d22b910520aab3b20575f2d0bc28b4960b8f912f5b15cede0af0203010001"))
tx := utils.HexToBin([]byte("0c55b20550013401320131013204302e3031013001300130013001300130013001300130013082010096a9486eb64fd6ca5992e96e879e60881941d7c7bc62a0b86d60d5662b3023e1b8206105cd605791019d01ebc4c0b843284ab58efb772a159066f5a635b94c4344f09f640f244d8f68264cc1c9f83b2471547504041f8c16d8e2af77b07c5fa3799c40f267b1c7fc03326195737b3c605481e4ff37713931c28bc258a83963abf3222c287346b6ba872163b63a676ba9538f6d73fac5ee90500068541c07abddc77dff14eb3a18e47b4157228fe435c79cfa2a6189cef97fcc5f9fd58d1efa4c12f3de3db2f1993d4cd029cd3471f8a82341f75df61af247b70661ae8848afc18d28ab7654f67591f271d826f3925a4b7798653651f1e8c62854ef0bf97127f182010382010056ab8e00429fd794d2b0b64dce4cb0e36d34e59090379249990bcdc824251f907fca3e912a2e1e759dd5622b42aa86149740d72faf9743262875470b57c8c6a8333358a043ec9d8033f799578547bb04eb0f09c8e51898990f4f6760af5213ff61a95506f8b294b0ded892cfa9fcdb801887d1bb405f99ce3656818ce23de0a675cf190a5b616bea7c301f1a76e3dbbfb2c576580daf49e8f83e2286f0a62e869e49295f8bb07da0c25ac0b0a1fd3e7a82887c34f7fdda2112f334e19d7c68a130447536543752ef5a51c16ae456eaf0aadc28dbabcc27e13b7c50942704258e018f6cb898fc4a3c8a7018ee9e529b5f789973b941de7336ce7bf08b79cfeae7"))
hash := utils.HexToBin(utils.Md5(tx))
toBeSent := utils.DecToBin(myUserId, 5)
toBeSent = append(toBeSent, utils.DecToBin(1, 1)...)
toBeSent = append(toBeSent, utils.DecToBin(utils.StrToInt64("0"), 1)...)
toBeSent = append(toBeSent, []byte(hash)...)
fmt.Printf("hash %x %v", hash, hash)
dataType := int64(1)
db := DbConnect(chBreaker, chAnswer, GoroutineName)
DisseminatorType1(host, userId, string(nodePublicKey), db, toBeSent, dataType)
}
示例5: Type10
func (t *TcpServer) Type10() {
/* Выдаем номер макс. блока
* запрос шлет демон blocksCollection
*/
blockId, err := t.Single("SELECT block_id FROM info_block").Int64()
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
_, err = t.Conn.Write(utils.DecToBin(blockId, 4))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
}
示例6: Type3
func (t *TcpServer) Type3() {
// размер данных
buf := make([]byte, 4)
_, err := t.Conn.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
size := utils.BinToDec(buf)
if size < 10485760 {
// сами данные
binaryData := make([]byte, size)
//binaryData, err = ioutil.ReadAll(t.Conn)
_, err = io.ReadFull(t.Conn, binaryData)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
/*
* Пересылаем тр-ию, полученную по локальной сети, конечному ноду, указанному в первых 100 байтах тр-ии
* от демона disseminator
* */
host, err := utils.ProtectedCheckRemoteAddrAndGetHost(&binaryData, t.Conn)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// шлем данные указанному хосту
conn2, err := utils.TcpConn(host)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
defer conn2.Close()
// шлем тип данных
_, err = conn2.Write(utils.DecToBin(2, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
err = utils.WriteSizeAndDataTCPConn(binaryData, conn2)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
}
}
示例7: Type4
func (t *TcpServer) Type4() {
// данные присылает демон confirmations
buf := make([]byte, 4)
_, err := t.Conn.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
blockId := utils.BinToDec(buf)
// используется для учета кол-ва подвержденных блоков, т.е. тех, которые есть у большинства нодов
hash, err := t.Single("SELECT hash FROM block_chain WHERE id = ?", blockId).String()
if err != nil {
log.Error("%v", utils.ErrInfo(err))
t.Conn.Write(utils.DecToBin(0, 1))
return
}
_, err = t.Conn.Write([]byte(hash))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
}
示例8: ElectionsAdmin
//.........这里部分代码省略.........
// проверим, прошло ли 2 недели с момента последнего обновления
adminTime, err := d.Single("SELECT time FROM admin").Int64()
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
if curTime-adminTime <= variables.Int64["new_pct_period"] {
if d.unlockPrintSleep(utils.ErrInfo("14 day error"), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
// сколько всего майнеров
countMiners, err := d.Single("SELECT count(miner_id) FROM miners WHERE active = 1").Int64()
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
if countMiners < 1000 {
if d.unlockPrintSleep(utils.ErrInfo("countMiners < 1000"), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
// берем все голоса
var newAdmin int64
votes_admin, err := d.GetMap(`
SELECT admin_user_id,
count(user_id) as votes
FROM votes_admin
WHERE time > ?
GROUP BY admin_user_id
`, "admin_user_id", "votes", curTime-variables.Int64["new_pct_period"])
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
for admin_user_id, votes := range votes_admin {
// если более 50% майнеров проголосовали
if utils.StrToInt64(votes) > countMiners/2 {
newAdmin = utils.StrToInt64(admin_user_id)
}
}
if newAdmin == 0 {
if d.unlockPrintSleep(utils.ErrInfo("newAdmin == 0"), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
_, myUserId, _, _, _, _, err := d.TestBlock()
forSign := fmt.Sprintf("%v,%v,%v,%v", utils.TypeInt("NewAdmin"), curTime, myUserId, newAdmin)
binSign, err := d.GetBinSign(forSign, myUserId)
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
data := utils.DecToBin(utils.TypeInt("NewAdmin"), 1)
data = append(data, utils.DecToBin(curTime, 4)...)
data = append(data, utils.EncodeLengthPlusData(utils.Int64ToByte(myUserId))...)
data = append(data, utils.EncodeLengthPlusData(utils.Int64ToByte(newAdmin))...)
data = append(data, utils.EncodeLengthPlusData([]byte(binSign))...)
err = d.InsertReplaceTxInQueue(data)
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
p := new(dcparser.Parser)
p.DCDB = d.DCDB
err = p.TxParser(utils.HexToBin(utils.Md5(data)), data, true)
if err != nil {
if d.unlockPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue BEGIN
}
d.dbUnlock()
if d.dSleep(d.sleepTime) {
break BEGIN
}
}
log.Debug("break BEGIN %v", GoroutineName)
}
示例9: Type8
func (t *TcpServer) Type8() {
/* делаем запрос на указанную ноду, чтобы получить оттуда тело блока
* запрос шлет демон blocksCollection и queueParserBlocks через p.GetBlocks()
*/
// размер данных
buf := make([]byte, 4)
_, err := t.Conn.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
size := utils.BinToDec(buf)
if size < 10485760 {
// сами данные
binaryData := make([]byte, size)
//binaryData, err = ioutil.ReadAll(t.Conn)
_, err = io.ReadFull(t.Conn, binaryData)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
blockId := utils.BinToDecBytesShift(&binaryData, 4)
host, err := utils.ProtectedCheckRemoteAddrAndGetHost(&binaryData, t.Conn)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// шлем данные указанному хосту
conn2, err := utils.TcpConn(host)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
defer conn2.Close()
// шлем тип данных
_, err = conn2.Write(utils.DecToBin(7, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// шлем ID блока
_, err = conn2.Write(utils.DecToBin(blockId, 4))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// в ответ получаем размер данных, которые нам хочет передать сервер
buf := make([]byte, 4)
_, err = conn2.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
dataSize := utils.BinToDec(buf)
// и если данных менее 10мб, то получаем их
if dataSize < 10485760 {
blockBinary := make([]byte, dataSize)
/*_, err := conn2.Read(blockBinary)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}*/
//blockBinary, err = ioutil.ReadAll(conn2)
_, err = io.ReadFull(conn2, binaryData)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// шлем тому, кто запросил блок из демона
_, err = t.Conn.Write(blockBinary)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
}
return
}
}
示例10: Type11
func (t *TcpServer) Type11() {
/* Получаем данные от send_to_pool */
log.Debug("Type11")
// размер данных
buf := make([]byte, 4)
_, err := t.Conn.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
size := utils.BinToDec(buf)
log.Debug("size: %d", size)
if size < 32<<20 {
// сами данные
log.Debug("read data")
binaryData := make([]byte, size)
//binaryData, err = ioutil.ReadAll(t.Conn)
_, err = io.ReadFull(t.Conn, binaryData)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
//log.Debug("binaryData %x", binaryData)
userId := utils.BinToDec(utils.BytesShift(&binaryData, 5))
log.Debug("userId %d", userId)
// проверим, есть ли такой юзер на пуле
inPool, err := t.Single(`SELECT user_id FROM community WHERE user_id=?`, userId).Int64()
if inPool <= 0 {
log.Error("%v", utils.ErrInfo("inPool<=0"))
_, err = t.Conn.Write(utils.DecToBin(0, 1))
return
}
log.Debug("inPool %d", inPool)
filesSign := utils.BytesShift(&binaryData, utils.DecodeLength(&binaryData))
log.Debug("filesSign %x", filesSign)
forSign := ""
var files []string
for i := 0; i < 3; i++ {
size := utils.DecodeLength(&binaryData)
log.Debug("size %d", size)
data := utils.BytesShift(&binaryData, size)
//log.Debug("data %x", data)
fileType := utils.BinToDec(utils.BytesShift(&data, 1))
log.Debug("fileType %d", fileType)
var name string
switch fileType {
case 0:
name = utils.Int64ToStr(userId) + "_user_face.jpg"
case 1:
name = utils.Int64ToStr(userId) + "_user_profile.jpg"
case 2:
name = utils.Int64ToStr(userId) + "_user_video.mp4"
/*case 3:
name = utils.Int64ToStr(userId)+"_user_video.webm"
case 4:
name = utils.Int64ToStr(userId)+"_user_video.ogv"*/
}
forSign = forSign + string(utils.DSha256((data))) + ","
log.Debug("forSign %s", forSign)
err = ioutil.WriteFile(os.TempDir()+"/"+name, data, 0644)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
files = append(files, name)
log.Debug("files %d", files)
if len(binaryData) == 0 {
break
}
}
if len(forSign) == 0 {
log.Error("%v", utils.ErrInfo("len(forSign) == 0"))
_, err = t.Conn.Write(utils.DecToBin(0, 1))
return
}
if len(files) == 3 {
forSign = forSign[:len(forSign)-1]
}
// проверим подпись
publicKey, err := t.GetUserPublicKey(userId)
resultCheckSign, err := utils.CheckSign([][]byte{[]byte(publicKey)}, forSign, utils.HexToBin(filesSign), true)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
_, err = t.Conn.Write(utils.DecToBin(0, 1))
return
}
if resultCheckSign {
for i := 0; i < len(files); i++ {
utils.CopyFileContents(os.TempDir()+"/"+files[i], *utils.Dir+"/public/"+files[i])
}
} else {
for i := 0; i < len(files); i++ {
os.Remove(os.TempDir() + "/" + files[i])
}
}
// и возвращаем статус
_, err = t.Conn.Write(utils.DecToBin(1, 1))
//.........这里部分代码省略.........
示例11: DisseminatorType1
func (d *daemon) DisseminatorType1(host string, userId int64, node_public_key string, toBeSent []byte, dataType int64) {
log.Debug("host %v / userId %v", host, userId)
// шлем данные указанному хосту
conn, err := utils.TcpConn(host)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
defer conn.Close()
randTestblockHash, err := d.Single("SELECT head_hash FROM queue_testblock").String()
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// получаем IV + ключ + зашифрованный текст
dataToBeSent, key, iv, err := utils.EncryptData(toBeSent, []byte(node_public_key), randTestblockHash)
log.Debug("key: %s", key)
log.Debug("iv: %s", iv)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// вначале шлем тип данных, чтобы принимающая сторона могла понять, как именно надо обрабатывать присланные данные
n, err := conn.Write(utils.DecToBin(dataType, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
log.Debug("n: %x", n)
// т.к. на приеме может быть пул, то нужно дописать в начало user_id, чьим нодовским ключем шифруем
dataToBeSent = append(utils.DecToBin(userId, 5), dataToBeSent...)
log.Debug("dataToBeSent: %x", dataToBeSent)
// в 4-х байтах пишем размер данных, которые пошлем далее
size := utils.DecToBin(len(dataToBeSent), 4)
n, err = conn.Write(size)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
log.Debug("n: %x", n)
n, err = conn.Write(dataToBeSent)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
log.Debug("n: %d / size: %v / len: %d", n, utils.BinToDec(size), len(dataToBeSent))
// в ответ получаем размер данных, которые нам хочет передать сервер
buf := make([]byte, 4)
n, err = conn.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
log.Debug("n: %x", n)
dataSize := utils.BinToDec(buf)
log.Debug("dataSize %d", dataSize)
// и если данных менее 1мб, то получаем их
if dataSize < 1048576 {
encBinaryTxHashes := make([]byte, dataSize)
_, err = io.ReadFull(conn, encBinaryTxHashes)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// разбираем полученные данные
binaryTxHashes, err := utils.DecryptCFB(iv, encBinaryTxHashes, key)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
log.Debug("binaryTxHashes %x", binaryTxHashes)
var binaryTx []byte
for {
// Разбираем список транзакций
txHash := make([]byte, 16)
if len(binaryTxHashes) >= 16 {
txHash = utils.BytesShift(&binaryTxHashes, 16)
}
txHash = utils.BinToHex(txHash)
log.Debug("txHash %s", txHash)
utils.WriteSelectiveLog("SELECT data FROM transactions WHERE hex(hash) = " + string(txHash))
tx, err := d.Single("SELECT data FROM transactions WHERE hex(hash) = ?", txHash).Bytes()
log.Debug("tx %x", tx)
if err != nil {
utils.WriteSelectiveLog(err)
log.Error("%v", utils.ErrInfo(err))
return
}
utils.WriteSelectiveLog("tx: " + string(utils.BinToHex(tx)))
if len(tx) > 0 {
binaryTx = append(binaryTx, utils.EncodeLengthPlusData(tx)...)
}
if len(binaryTxHashes) == 0 {
//.........这里部分代码省略.........
示例12: Disseminator
//.........这里部分代码省略.........
// определим, от кого будем слать
r := utils.RandInt(0, len(myMinersIds))
myMinerId := myMinersIds[r]
myUserId, err := d.Single("SELECT user_id FROM miners_data WHERE miner_id = ?", myMinerId).Int64()
if err != nil {
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue BEGIN
}
// возьмем хэш текущего блока и номер блока
// для теста ролбеков отключим на время
data, err := d.OneRow("SELECT block_id, hash, head_hash FROM info_block WHERE sent = 0").Bytes()
if err != nil {
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue BEGIN
}
err = d.ExecSql("UPDATE info_block SET sent = 1")
if err != nil {
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue BEGIN
}
/*
* Составляем данные на отправку
* */
// 5 байт = наш user_id. Но они будут не первые, т.к. m_curl допишет вперед user_id получателя (нужно для пулов)
toBeSent := utils.DecToBin(myUserId, 5)
if len(data) > 0 { // блок
// если 5-й байт = 0, то на приемнике будем читать блок, если = 1 , то сразу хэши тр-ий
toBeSent = append(toBeSent, utils.DecToBin(0, 1)...)
toBeSent = append(toBeSent, utils.DecToBin(utils.BytesToInt64(data["block_id"]), 3)...)
toBeSent = append(toBeSent, data["hash"]...)
toBeSent = append(toBeSent, data["head_hash"]...)
err = d.ExecSql("UPDATE info_block SET sent = 1")
if err != nil {
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue BEGIN
}
} else { // тр-ии без блока
toBeSent = append(toBeSent, utils.DecToBin(1, 1)...)
}
// возьмем хэши тр-ий
//utils.WriteSelectiveLog("SELECT hash, high_rate FROM transactions WHERE sent = 0 AND for_self_use = 0")
transactions, err := d.GetAll("SELECT hash, high_rate FROM transactions WHERE sent = 0 AND for_self_use = 0", -1)
if err != nil {
utils.WriteSelectiveLog(err)
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue BEGIN
}
// нет ни транзакций, ни блока для отправки...
if len(transactions) == 0 && len(toBeSent) < 10 {
//utils.WriteSelectiveLog("len(transactions) == 0")
//log.Debug("len(transactions) == 0")
if d.dSleep(d.sleepTime) {
示例13: TestblockDisseminator
//.........这里部分代码省略.........
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue
}
hosts := []string{}
for _, host := range hosts_ {
if !stringInSlice(host, hosts) {
hosts = append(hosts, host)
}
}
log.Debug("hosts: %v", hosts)
// шлем block_id, user_id, mrkl_root, signature
data, err := d.OneRow("SELECT block_id, time, user_id, mrkl_root, signature FROM testblock WHERE status = 'active' AND sent=0").String()
if err != nil {
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue
}
if len(data) > 0 {
err = d.ExecSql("UPDATE testblock SET sent=1")
if err != nil {
if d.dPrintSleep(err, d.sleepTime) {
break BEGIN
}
continue
}
dataToBeSent := utils.DecToBin(utils.StrToInt64(data["block_id"]), 4)
dataToBeSent = append(dataToBeSent, utils.DecToBin(data["time"], 4)...)
dataToBeSent = append(dataToBeSent, utils.DecToBin(data["user_id"], 4)...)
dataToBeSent = append(dataToBeSent, []byte(data["mrkl_root"])...)
dataToBeSent = append(dataToBeSent, utils.EncodeLengthPlusData(data["signature"])...)
for _, host := range hosts {
go func(host string) {
log.Debug("host: %v", host)
conn, err := utils.TcpConn(host)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
defer conn.Close()
// вначале шлем тип данных
_, err = conn.Write(utils.DecToBin(6, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// в 4-х байтах пишем размер данных, которые пошлем далее
_, err = conn.Write(utils.DecToBin(len(dataToBeSent), 4))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
// далее шлем сами данные
log.Debug("dataToBeSent: %x", dataToBeSent)
_, err = conn.Write(dataToBeSent)
if err != nil {
示例14: Type12
func (t *TcpServer) Type12() {
/* Получаем данные от send_promised_amount_to_pool */
log.Debug("Type12")
// размер данных
buf := make([]byte, 4)
_, err := t.Conn.Read(buf)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
size := utils.BinToDec(buf)
log.Debug("size: %d", size)
if size < 32<<20 {
// сами данные
log.Debug("read data")
binaryData := make([]byte, size)
_, err = io.ReadFull(t.Conn, binaryData)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
//log.Debug("binaryData %x", binaryData)
userId := utils.BinToDec(utils.BytesShift(&binaryData, 5))
currencyId := utils.BinToDec(utils.BytesShift(&binaryData, 1))
log.Debug("userId %d", userId)
log.Debug("currencyId %d", currencyId)
// проверим, есть ли такой юзер на пуле
inPool, err := t.Single(`SELECT user_id FROM community WHERE user_id=?`, userId).Int64()
if inPool <= 0 {
log.Error("%v", utils.ErrInfo("inPool<=0"))
_, err = t.Conn.Write(utils.DecToBin(0, 1))
return
}
log.Debug("inPool %d", inPool)
filesSign := utils.BytesShift(&binaryData, utils.DecodeLength(&binaryData))
log.Debug("filesSign %x", filesSign)
size := utils.DecodeLength(&binaryData)
log.Debug("size %d", size)
data := utils.BytesShift(&binaryData, size)
//log.Debug("data %x", data)
fileType := utils.BinToDec(utils.BytesShift(&data, 1))
log.Debug("fileType %d", fileType)
fileName := utils.Int64ToStr(userId) + "_promised_amount_" + utils.Int64ToStr(currencyId) + ".mp4"
forSign := string(utils.DSha256((data)))
log.Debug("forSign %s", forSign)
err = ioutil.WriteFile(os.TempDir()+"/"+fileName, data, 0644)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
if len(forSign) == 0 {
log.Error("%v", utils.ErrInfo("len(forSign) == 0"))
_, err = t.Conn.Write(utils.DecToBin(0, 1))
return
}
// проверим подпись
publicKey, err := t.GetUserPublicKey(userId)
resultCheckSign, err := utils.CheckSign([][]byte{[]byte(publicKey)}, forSign, utils.HexToBin(filesSign), true)
if err != nil {
log.Error("%v", utils.ErrInfo(err))
_, err = t.Conn.Write(utils.DecToBin(0, 1))
return
}
if resultCheckSign {
utils.CopyFileContents(os.TempDir()+"/"+fileName, *utils.Dir+"/public/"+fileName)
} else {
os.Remove(os.TempDir() + "/" + fileName)
}
// и возвращаем статус
_, err = t.Conn.Write(utils.DecToBin(1, 1))
if err != nil {
log.Error("%v", utils.ErrInfo(err))
return
}
} else {
log.Error("%v", utils.ErrInfo("size>32mb"))
}
}
示例15: MaxOtherCurrenciesGenerator
//.........这里部分代码省略.........
}
continue BEGIN
}
variables, err := d.GetAllVariables()
curTime := utils.Time()
totalCountCurrencies, err := d.GetCountCurrencies()
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
// проверим, прошло ли 2 недели с момента последнего обновления
pctTime, err := d.Single("SELECT max(time) FROM max_other_currencies_time").Int64()
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
if curTime-pctTime <= variables.Int64["new_max_other_currencies"] {
if d.unlockPrintSleep(utils.ErrInfo("14 day error"), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
// берем все голоса
maxOtherCurrenciesVotes := make(map[int64][]map[int64]int64)
rows, err := d.Query("SELECT currency_id, count, count(user_id) as votes FROM votes_max_other_currencies GROUP BY currency_id, count ORDER BY currency_id, count ASC")
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
for rows.Next() {
var currency_id, count, votes int64
err = rows.Scan(¤cy_id, &count, &votes)
if err != nil {
rows.Close()
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
maxOtherCurrenciesVotes[currency_id] = append(maxOtherCurrenciesVotes[currency_id], map[int64]int64{count: votes})
}
rows.Close()
newMaxOtherCurrenciesVotes := make(map[string]int64)
for currencyId, countAndVotes := range maxOtherCurrenciesVotes {
newMaxOtherCurrenciesVotes[utils.Int64ToStr(currencyId)] = utils.GetMaxVote(countAndVotes, 0, totalCountCurrencies, 10)
}
jsonData, err := json.Marshal(newMaxOtherCurrenciesVotes)
_, myUserId, _, _, _, _, err := d.TestBlock()
forSign := fmt.Sprintf("%v,%v,%v,%s", utils.TypeInt("NewMaxOtherCurrencies"), curTime, myUserId, jsonData)
log.Debug("forSign = %v", forSign)
binSign, err := d.GetBinSign(forSign, myUserId)
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
data := utils.DecToBin(utils.TypeInt("NewMaxOtherCurrencies"), 1)
data = append(data, utils.DecToBin(curTime, 4)...)
data = append(data, utils.EncodeLengthPlusData(utils.Int64ToByte(myUserId))...)
data = append(data, utils.EncodeLengthPlusData(jsonData)...)
data = append(data, utils.EncodeLengthPlusData([]byte(binSign))...)
err = d.InsertReplaceTxInQueue(data)
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
p := new(dcparser.Parser)
p.DCDB = d.DCDB
err = p.TxParser(utils.HexToBin(utils.Md5(data)), data, true)
if err != nil {
if d.unlockPrintSleep(utils.ErrInfo(err), d.sleepTime) {
break BEGIN
}
continue BEGIN
}
d.dbUnlock()
if d.dSleep(d.sleepTime) {
break BEGIN
}
}
log.Debug("break BEGIN %v", GoroutineName)
}