1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/qiuliyun-go-copyright-p1

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
INFO.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 10:40 1db743f

go-copyright-p1

1 Структура каталога

  • static - каталог HTML-страниц
  • configs - обработка конфигурационных файлов
  • routes - обработка маршрутов
  • etc - обработка конфигурационных файлов
  • utils - универсальные обработчики, сообщения об ошибках
  • dbs - файлы обработки баз данных
  • eths - обработка связанных с Ethereum данных

2 Необходимое окружение

2.1 Установка плагина для чтения конфигурационных файлов

go get -u github.com/BurntSushi/toml

2.2 Установка фреймворка Echo

Сначала установите 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

2.3 Методы установки библиотек, которые могут потребоваться в процессе разработки

Установка драйвера для 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

2.4 Обучающие материалы для фреймворка Echo

Обучение фреймворку Echo

3 Скрипты для создания баз данных

Скрипт создания базы данных

4 Описание интерфейсов

4.1 Регистрация

Параметр Описание
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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/qiuliyun-go-copyright-p1.git
git@api.gitlife.ru:oschina-mirror/qiuliyun-go-copyright-p1.git
oschina-mirror
qiuliyun-go-copyright-p1
qiuliyun-go-copyright-p1
master