go get -u github.com/BurntSushi/toml
Сначала установите crypto, labstack использует этот пакет, который не может быть установлен с помощью go get
cd $GOPATH/src
mkdir -p golang.org/x/
cd golang.org/x/
git clone https://github.com/golang/crypto.git
Установка Echo
go get -u github.com/labstack/echo
go get -u github.com/labstack/echo-contrib/session
Установка драйвера для Go для MySQL
go get -u github.com/go-sql-driver/mysql
Другие возможные библиотеки
go get -u github.com/labstack/gommon/
go get -u github.com/dgrijalva/jwt-go
go get -u github.com/go-sql-driver/mysql
Параметр | Описание |
---|---|
url | /account |
method | POST |
Запрос | json:email,identity_id,username |
Ответ | json:errno,errmsg |
Пример ответа
{"errno":"0","errmsg":"Успешно","data":null}
```### 4.2 Сессия (запрос после регистрации)
Параметр | Описание
---|---
url | /session
method | GET
Запрос | Нет
Ответ | json:errno,errmsg
Пример ответа
{"errno":"0","errmsg":"Успешно","data":null}
### 4.3 Вход
Параметр | Описание
---|---
url | /login
method | POST
Запрос | json:identity_id,username
Ответ | json:errno,errmsg
Пример ответа
{"errno":"0","errmsg":"Успешно","data":null}
### 4.4 Загрузка изображения
Параметр | Описание
---|---
url | /content
method | POST
Запрос | Форматированные двоичные данные файла
Ответ | json:errno,errmsg
Пример запроса
curl --form "fileupload=@wyz.jpg" http://localhost:8086/content
### 4.5 Просмотр всех изображений пользователя
Параметр | Описание
---|---
url | /content
method | GET
Запрос | Нет
Ответ | json:{errno,errmsg,Data:{total_page,current_page,contents:[]}}Описание: `contents` — это массив структур. Пример представлен ниже:
```markdown
{ "errno": "0", "errmsg": "Успех", "data": { "contents": [{ "content_hash": "2b48f7f9b1156bd26d13d498d2a2441ca857922d743e5ab7d8fde20dd18e3f21", "title": "Марсьяль2.jpeg", "token_id":"3" }, { "content_hash": "f72d0385722cb58fddaa493557950fe83fe317a0aa41d44ddb386c82f902d9dd", "title": "Птичья Усь2.jpg", "token_id":"4" }, { "content_hash": "6bb7e5ec0c5f057cfdb25e54a2f0f09bca5819213761697fa57e6368eed1ec9d", "title": "am9.jpg", "token_id":"5" }], "current_page": 1, "total_page": 1 } }
```### 4.6 Просмотр отдельного изображения
Название | Описание
---|---
url | /content/:title
method | GET
Запросные данные | Отсутствуют
Ответные данные | Бинарные данные изображения
### 4.7 Начало аукциона
Пользователь самостоятельно запускает аукцион, указывая количество и ценуНазвание | Описание
---|---
url | /auction
method | POST
Запросные данные | json:{content_hash, percent, price, token_id}
Ответные данные | Бинарные данные изображения
Пример запросных данных:
content_hash: "6bb7e5ec0c5f057cfdb25e54a2f0f09bca5819213761697fa57e6368eed1ec9d", percent: 30, price: 20, token_id: 6
### 4.8 Просмотр текущего аукциона
Название | Описание
---|---
url | /auctions
method | GET
Запросные данные | Отсутствуют
Ответные данные | json:{errno, errmsg, data:[{price, title, token_id, content_hash}]}
Пример ответных данных
{"errno":"0","errmsg":"Успешно","data":[{"price":"100","title":"Марсьяль и его девушка.jpeg","token_id":"6"}]}
### 4.9 Завершение аукциона
Название | Описание
---|---
url | /auction/bid
method | GET
Запросные данные | price, token_id
Ответные данные | json:{errno, errmsg}
## 5 Использование функций
### 5.1 Общие публичные обработчики
package utils
import ( "fmt" "io/ioutil" "net/http" "strings"
"github.com/labstack/echo"
)
const ( RECODE_OK = "0" RECODE_DBERR = "4001" RECODE_NODATA = "4002" RECODE_DATAEXIST = "4003" RECODE_DATAERR = "4004" RECODE_SESSIONERR = "4101" RECODE_LOGINERR = "4102" RECODE_PARAMERR = "4103" RECODE_USERERR = "4104" RECODE_HASHERR = "4105" RECODE_PWDERR = "4106" RECODE_EXISTSERR = "4201" RECODE_IPCERR = "4202" RECODE_THIRDERR = "4301" RECODE_IOERR = "4302" RECODE_SERVERERR = "4500" RECODE_UNKNOWERR = "4501" )
### 5.2 Разбор содержимого подписанных событий
```
func LogDataUnpack(start, end int, val interface{}, data []byte) (err error) {
length := len(data)
fmt.Println("call--- LogDataUnpack begin", reflect.TypeOf(val).String(), length)
}
``````go
if start >= length || end > length {
return errors.New("слишком короткие данные")
}
pdata := data[start:end]
fmt.Println(string(data), string(pdata))
if reflect.TypeOf(val).String() == "int64" || reflect.TypeOf(val).String() == "*int64" {
var tmpval *int64 = val.(*int64)
*tmpval, err = strconv.ParseInt(string(pdata), 16, 32)
fmt.Println("call ParseInt", val)
} else if reflect.TypeOf(val).String() == "string" || reflect.TypeOf(val).String() == "*string" {
var tmpval *string = val.(*string)
*tmpval = string(pdata)
fmt.Println("call ParseInt", val)
}
fmt.Println("call--- LogDataUnpack end", val)
return nil
}
func ParseMintEvent2Db(data []byte) error {
fmt.Println(string(data))
var tokenId int64
err := LogDataUnpack(32*5, 32*6, &tokenId, data)
if err != nil {
fmt.Println("не удалось получить tokenid", err)
return err
}
fmt.Println("tokenId===", tokenId)
var pixHash string
err = LogDataUnpack(32*0, 32*2, &pixHash, data)
if err != nil {
return err
}
fmt.Println("pixHash===", pixHash)
var pixAddr string
err = LogDataUnpack(88, 128, &pixAddr, data)
if err != nil {
return err
}
pixAddr = "0x" + pixAddr
fmt.Println("pixAddr===", pixAddr)
// вставка в базу данных
sql := fmt.Sprintf("insert into account_content(content_hash,token_id,address) values('%s',%d,'%s')", pixHash, tokenId, pixAddr)
_, err = dbs.Create(sql)
if err != nil {
fmt.Println("не удалось вставить в MySQL", sql, err)
return err
}
return nil
}
```
```
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )