Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e69cade706 | |||
| 220d73df6e | |||
| aacf37cc10 | |||
| ec4410af8f | |||
| 8908455183 | |||
| 37d4ed3844 | |||
| e53e964213 | |||
| b2e33a7601 | |||
| a6795510a2 | |||
| 8f8a93527a | |||
| 405115165f | |||
| 5d39e41ec9 | |||
| c4122b2963 | |||
| a50daa4993 | |||
| 2ff0540328 | |||
| 0c9e876f1f |
@@ -39,11 +39,16 @@ Epusdt
|
|||||||
|
|
||||||
## 教程:
|
## 教程:
|
||||||
- 宝塔运行`epusdt`教程👉🏻[宝塔运行epusdt](wiki/BT_RUN.md)
|
- 宝塔运行`epusdt`教程👉🏻[宝塔运行epusdt](wiki/BT_RUN.md)
|
||||||
|
- 不好意思我有洁癖,手动运行`epusdt`教程👉🏻[手动运行epusdt](wiki/manual_RUN.md)
|
||||||
- 开发者接入`epusdt`文档👉🏻[开发者接入epusdt](wiki/API.md)
|
- 开发者接入`epusdt`文档👉🏻[开发者接入epusdt](wiki/API.md)
|
||||||
|
- HTML+PHP极速运行`epusdt`教程👉🏻[使用PHPAPI-for-epusdt极速接入epusdt](https://github.com/BlueSkyXN/PHPAPI-for-epusdt)
|
||||||
|
|
||||||
## 已适配系统插件
|
## 已适配系统插件
|
||||||
- 独角数卡[插件地址](plugins/dujiaoka)
|
- 独角数卡[插件地址](plugins/dujiaoka)
|
||||||
|
|
||||||
|
## 🔥推荐服务器
|
||||||
|
- (美国免备案vps,配置2核2G仅需`20.98$`≈`145RMB`一年/支持支付宝付款)[👉🏻点我直达](https://my.racknerd.com/aff.php?aff=2745&pid=681)
|
||||||
|
|
||||||
## 加入交流/意见反馈
|
## 加入交流/意见反馈
|
||||||
- `Epusdt`频道[https://t.me/epusdt](https://t.me/epusdt)
|
- `Epusdt`频道[https://t.me/epusdt](https://t.me/epusdt)
|
||||||
- `Epusdt`交流群组[https://t.me/epusdt_group](https://t.me/epusdt_group)
|
- `Epusdt`交流群组[https://t.me/epusdt_group](https://t.me/epusdt_group)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# This is an example .goreleaser.yml file with some sensible defaults.
|
# This is an example .goreleaser.yml file with some sensible defaults.
|
||||||
# Make sure to check the documentation at https://goreleaser.com
|
# Make sure to check the documentation at https://goreleaser.com
|
||||||
|
project_name: epusdt
|
||||||
before:
|
before:
|
||||||
hooks:
|
hooks:
|
||||||
# You may remove this if you don't use go modules.
|
# You may remove this if you don't use go modules.
|
||||||
@@ -15,8 +16,8 @@ builds:
|
|||||||
- windows
|
- windows
|
||||||
goarch:
|
goarch:
|
||||||
- amd64
|
- amd64
|
||||||
#- arm
|
- arm
|
||||||
#- 386
|
- 386
|
||||||
archives:
|
archives:
|
||||||
- replacements:
|
- replacements:
|
||||||
darwin: Darwin
|
darwin: Darwin
|
||||||
@@ -25,7 +26,7 @@ archives:
|
|||||||
386: i386
|
386: i386
|
||||||
amd64: x86_64
|
amd64: x86_64
|
||||||
id: epusdt
|
id: epusdt
|
||||||
name_template: "{{ .ProjectName }}_v0.0.1_{{ .Os }}_{{ .Arch }}"
|
name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}"
|
||||||
format: tar.gz
|
format: tar.gz
|
||||||
files:
|
files:
|
||||||
- .env.example
|
- .env.example
|
||||||
|
|||||||
+9
-1
@@ -6,19 +6,27 @@ require (
|
|||||||
github.com/go-redis/redis/v8 v8.11.5
|
github.com/go-redis/redis/v8 v8.11.5
|
||||||
github.com/go-resty/resty/v2 v2.7.0
|
github.com/go-resty/resty/v2 v2.7.0
|
||||||
github.com/golang-module/carbon/v2 v2.0.1
|
github.com/golang-module/carbon/v2 v2.0.1
|
||||||
|
github.com/google/btree v1.0.0 // indirect
|
||||||
|
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 // indirect
|
||||||
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
github.com/gookit/color v1.5.0
|
github.com/gookit/color v1.5.0
|
||||||
github.com/gookit/goutil v0.4.6
|
github.com/gookit/goutil v0.4.6
|
||||||
github.com/gookit/validate v1.3.1
|
github.com/gookit/validate v1.3.1
|
||||||
github.com/hibiken/asynq v0.22.1
|
github.com/hibiken/asynq v0.23.0
|
||||||
github.com/json-iterator/go v1.1.12
|
github.com/json-iterator/go v1.1.12
|
||||||
github.com/labstack/echo/v4 v4.6.0
|
github.com/labstack/echo/v4 v4.6.0
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/natefinch/lumberjack v2.0.0+incompatible
|
github.com/natefinch/lumberjack v2.0.0+incompatible
|
||||||
github.com/robfig/cron/v3 v3.0.1
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
github.com/satori/go.uuid v1.2.0
|
github.com/satori/go.uuid v1.2.0
|
||||||
github.com/shopspring/decimal v1.3.1
|
github.com/shopspring/decimal v1.3.1
|
||||||
|
github.com/spf13/cast v1.5.0 // indirect
|
||||||
github.com/spf13/cobra v1.2.1
|
github.com/spf13/cobra v1.2.1
|
||||||
github.com/spf13/viper v1.9.0
|
github.com/spf13/viper v1.9.0
|
||||||
go.uber.org/zap v1.17.0
|
go.uber.org/zap v1.17.0
|
||||||
|
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec // indirect
|
||||||
|
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af // indirect
|
||||||
|
google.golang.org/protobuf v1.28.1 // indirect
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
||||||
gopkg.in/telebot.v3 v3.0.0
|
gopkg.in/telebot.v3 v3.0.0
|
||||||
gorm.io/driver/mysql v1.1.2
|
gorm.io/driver/mysql v1.1.2
|
||||||
|
|||||||
+19
@@ -71,6 +71,7 @@ github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWH
|
|||||||
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
|
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
@@ -88,6 +89,7 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
|
|||||||
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
|
||||||
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
|
||||||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||||
|
github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
|
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
|
||||||
@@ -162,6 +164,8 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
|
||||||
|
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||||
@@ -186,6 +190,8 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4
|
|||||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
|
github.com/google/uuid v1.2.0 h1:qJYtXnJRWmpe7m/3XlyhrsLrEURqHRM2kxzoxXqyUDs=
|
||||||
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
|
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
||||||
@@ -236,6 +242,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J
|
|||||||
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
|
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
|
||||||
github.com/hibiken/asynq v0.22.1 h1:t7bbiz2O4MC69qKeKp5UON7ToxynBNXT/kTP/XYq9M8=
|
github.com/hibiken/asynq v0.22.1 h1:t7bbiz2O4MC69qKeKp5UON7ToxynBNXT/kTP/XYq9M8=
|
||||||
github.com/hibiken/asynq v0.22.1/go.mod h1:K70jPVx+CAmmQrXot7Dru0D52EO7ob4BIun3ri5z1Qw=
|
github.com/hibiken/asynq v0.22.1/go.mod h1:K70jPVx+CAmmQrXot7Dru0D52EO7ob4BIun3ri5z1Qw=
|
||||||
|
github.com/hibiken/asynq v0.23.0 h1:kmKkNFgqiXBatC8oz94Mer6uvKoGn4STlIVDV5wnKyE=
|
||||||
|
github.com/hibiken/asynq v0.23.0/go.mod h1:K70jPVx+CAmmQrXot7Dru0D52EO7ob4BIun3ri5z1Qw=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
@@ -258,9 +266,11 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
|||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
|
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
|
||||||
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
||||||
|
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
|
||||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/labstack/echo/v4 v4.6.0 h1:vsYEeeYy077cB5yMpgI+ubA7iVRZEtrzHhcvRhd27gA=
|
github.com/labstack/echo/v4 v4.6.0 h1:vsYEeeYy077cB5yMpgI+ubA7iVRZEtrzHhcvRhd27gA=
|
||||||
github.com/labstack/echo/v4 v4.6.0/go.mod h1:RnjgMWNDB9g/HucVWhQYNQP9PvbYf6adqftqryo7s9k=
|
github.com/labstack/echo/v4 v4.6.0/go.mod h1:RnjgMWNDB9g/HucVWhQYNQP9PvbYf6adqftqryo7s9k=
|
||||||
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
|
github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0=
|
||||||
@@ -340,6 +350,7 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
|||||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
|
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
|
||||||
github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE=
|
github.com/sagikazarmark/crypt v0.1.0/go.mod h1:B/mN0msZuINBtQ1zZLEQcegFJJf9vnYIR88KRMEuODE=
|
||||||
@@ -357,6 +368,8 @@ github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z
|
|||||||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
|
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
|
||||||
github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
|
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
|
||||||
|
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
|
||||||
github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw=
|
github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw=
|
||||||
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
|
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
|
||||||
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
|
||||||
@@ -592,6 +605,8 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0=
|
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 h1:XfKQ4OlFl8okEOr5UvAqFRVj8pY/4yfcXrddB8qAbU0=
|
||||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec h1:BkDtF2Ih9xZ7le9ndzTA7KJow28VbQW3odyk/8drmuI=
|
||||||
|
golang.org/x/sys v0.0.0-20220928140112-f11e5e49a4ec/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@@ -609,6 +624,8 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
|
|||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
|
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 h1:Hir2P/De0WpUhtrKGGjvSb2YxUgyZ7EFOSLIcSSpiwE=
|
||||||
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af h1:Yx9k8YCG3dvF87UAn2tu2HQLf2dt/eR1bXxpLMWeH+Y=
|
||||||
|
golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
@@ -798,6 +815,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
|
|||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
|
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
|
||||||
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||||
|
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||||
|
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||||
|
|||||||
@@ -21,10 +21,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
CnyMinimumPaymentAmount = 0.01 // cny最低支付金额
|
CnyMinimumPaymentAmount = 0.01 // cny最低支付金额
|
||||||
UsdtMinimumPaymentAmount = 0.001 // usdt最低支付金额
|
UsdtMinimumPaymentAmount = 0.01 // usdt最低支付金额
|
||||||
UsdtAmountPerIncrement = 0.001 // usdt每次递增金额
|
UsdtAmountPerIncrement = 0.01 // usdt每次递增金额
|
||||||
IncrementalMaximumNumber = 100 // 最大递增次数
|
IncrementalMaximumNumber = 100 // 最大递增次数
|
||||||
)
|
)
|
||||||
|
|
||||||
var gCreateTransactionLock sync.Mutex
|
var gCreateTransactionLock sync.Mutex
|
||||||
@@ -62,7 +62,7 @@ func CreateTransaction(req *request.CreateTransactionRequest) (*response.CreateT
|
|||||||
if len(walletAddress) <= 0 {
|
if len(walletAddress) <= 0 {
|
||||||
return nil, constant.NotAvailableWalletAddress
|
return nil, constant.NotAvailableWalletAddress
|
||||||
}
|
}
|
||||||
amount := math.MustParsePrecFloat64(decimalUsdt.InexactFloat64(), 3)
|
amount := math.MustParsePrecFloat64(decimalUsdt.InexactFloat64(), 2)
|
||||||
availableToken, availableAmount, err := CalculateAvailableWalletAndAmount(amount, walletAddress)
|
availableToken, availableAmount, err := CalculateAvailableWalletAndAmount(amount, walletAddress)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -18,12 +18,12 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
const UsdtTrc20ApiUri = "https://apilist.tronscan.org/api/token_trc20/transfers"
|
const UsdtTrc20ApiUri = "https://apilist.tronscanapi.com/api/transfer/trc20"
|
||||||
|
|
||||||
type UsdtTrc20Resp struct {
|
type UsdtTrc20Resp struct {
|
||||||
Total int `json:"total"`
|
PageSize int `json:"page_size"`
|
||||||
RangeTotal int `json:"rangeTotal"`
|
Code int `json:"code"`
|
||||||
TokenTransfers []TokenTransfers `json:"token_transfers"`
|
Data []Data `json:"data"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type TokenInfo struct {
|
type TokenInfo struct {
|
||||||
@@ -35,26 +35,29 @@ type TokenInfo struct {
|
|||||||
TokenType string `json:"tokenType"`
|
TokenType string `json:"tokenType"`
|
||||||
TokenLogo string `json:"tokenLogo"`
|
TokenLogo string `json:"tokenLogo"`
|
||||||
TokenLevel string `json:"tokenLevel"`
|
TokenLevel string `json:"tokenLevel"`
|
||||||
|
IssuerAddr string `json:"issuerAddr"`
|
||||||
Vip bool `json:"vip"`
|
Vip bool `json:"vip"`
|
||||||
}
|
}
|
||||||
type TokenTransfers struct {
|
|
||||||
TransactionID string `json:"transaction_id"`
|
type Data struct {
|
||||||
BlockTs int64 `json:"block_ts"`
|
Amount string `json:"amount"`
|
||||||
FromAddress string `json:"from_address"`
|
ApprovalAmount string `json:"approval_amount"`
|
||||||
ToAddress string `json:"to_address"`
|
BlockTimestamp int64 `json:"block_timestamp"`
|
||||||
Block int `json:"block"`
|
Block int `json:"block"`
|
||||||
ContractAddress string `json:"contract_address"`
|
From string `json:"from"`
|
||||||
Quant string `json:"quant"`
|
To string `json:"to"`
|
||||||
ApprovalAmount string `json:"approval_amount"`
|
Hash string `json:"hash"`
|
||||||
EventType string `json:"event_type"`
|
Confirmed int `json:"confirmed"`
|
||||||
ContractType string `json:"contract_type"`
|
ContractType string `json:"contract_type"`
|
||||||
Confirmed bool `json:"confirmed"`
|
ContracTType int `json:"contractType"`
|
||||||
ContractRet string `json:"contractRet"`
|
Revert int `json:"revert"`
|
||||||
FinalResult string `json:"finalResult"`
|
ContractRet string `json:"contract_ret"`
|
||||||
TokenInfo TokenInfo `json:"tokenInfo"`
|
EventType string `json:"event_type"`
|
||||||
FromAddressIsContract bool `json:"fromAddressIsContract"`
|
IssueAddress string `json:"issue_address"`
|
||||||
ToAddressIsContract bool `json:"toAddressIsContract"`
|
Decimals int `json:"decimals"`
|
||||||
Revert bool `json:"revert"`
|
TokenName string `json:"token_name"`
|
||||||
|
ID string `json:"id"`
|
||||||
|
Direction int `json:"direction"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trc20CallBack trc20回调
|
// Trc20CallBack trc20回调
|
||||||
@@ -69,11 +72,13 @@ func Trc20CallBack(token string, wg *sync.WaitGroup) {
|
|||||||
startTime := carbon.Now().AddHours(-24).TimestampWithMillisecond()
|
startTime := carbon.Now().AddHours(-24).TimestampWithMillisecond()
|
||||||
endTime := carbon.Now().TimestampWithMillisecond()
|
endTime := carbon.Now().TimestampWithMillisecond()
|
||||||
resp, err := client.R().SetQueryParams(map[string]string{
|
resp, err := client.R().SetQueryParams(map[string]string{
|
||||||
"limit": "200",
|
"sort": "-timestamp",
|
||||||
|
"limit": "50",
|
||||||
"start": "0",
|
"start": "0",
|
||||||
"direction": "in",
|
"direction": "2",
|
||||||
"tokens": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
|
"db_version": "1",
|
||||||
"relatedAddress": token,
|
"trc20Id": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
|
||||||
|
"address": token,
|
||||||
"start_timestamp": stdutil.ToString(startTime),
|
"start_timestamp": stdutil.ToString(startTime),
|
||||||
"end_timestamp": stdutil.ToString(endTime),
|
"end_timestamp": stdutil.ToString(endTime),
|
||||||
}).Get(UsdtTrc20ApiUri)
|
}).Get(UsdtTrc20ApiUri)
|
||||||
@@ -88,14 +93,14 @@ func Trc20CallBack(token string, wg *sync.WaitGroup) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if trc20Resp.Total <= 0 {
|
if trc20Resp.PageSize <= 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, transfer := range trc20Resp.TokenTransfers {
|
for _, transfer := range trc20Resp.Data {
|
||||||
if transfer.ToAddress != token || transfer.FinalResult != "SUCCESS" {
|
if transfer.To != token || transfer.ContractRet != "SUCCESS" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
decimalQuant, err := decimal.NewFromString(transfer.Quant)
|
decimalQuant, err := decimal.NewFromString(transfer.Amount)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@@ -114,7 +119,7 @@ func Trc20CallBack(token string, wg *sync.WaitGroup) {
|
|||||||
}
|
}
|
||||||
// 区块的确认时间必须在订单创建时间之后
|
// 区块的确认时间必须在订单创建时间之后
|
||||||
createTime := order.CreatedAt.TimestampWithMillisecond()
|
createTime := order.CreatedAt.TimestampWithMillisecond()
|
||||||
if transfer.BlockTs < createTime {
|
if transfer.BlockTimestamp < createTime {
|
||||||
panic("Orders cannot actually be matched")
|
panic("Orders cannot actually be matched")
|
||||||
}
|
}
|
||||||
// 到这一步就完全算是支付成功了
|
// 到这一步就完全算是支付成功了
|
||||||
@@ -122,7 +127,7 @@ func Trc20CallBack(token string, wg *sync.WaitGroup) {
|
|||||||
Token: token,
|
Token: token,
|
||||||
TradeId: tradeId,
|
TradeId: tradeId,
|
||||||
Amount: amount,
|
Amount: amount,
|
||||||
BlockTransactionId: transfer.TransactionID,
|
BlockTransactionId: transfer.Hash,
|
||||||
}
|
}
|
||||||
err = OrderProcessing(req)
|
err = OrderProcessing(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -181,6 +181,7 @@
|
|||||||
let second = Math.round(ms / 1000);
|
let second = Math.round(ms / 1000);
|
||||||
let minute = Math.floor(second / 60);
|
let minute = Math.floor(second / 60);
|
||||||
let hour = Math.floor(minute / 60);
|
let hour = Math.floor(minute / 60);
|
||||||
|
if(minute > 60) minute %= 60
|
||||||
if (ms <= 0) {
|
if (ms <= 0) {
|
||||||
layer.alert("支付超时,请重新发起支付!", {icon: 5});
|
layer.alert("支付超时,请重新发起支付!", {icon: 5});
|
||||||
return;
|
return;
|
||||||
|
|||||||
+1
-1
@@ -7,6 +7,6 @@ func Start() {
|
|||||||
// 汇率监听
|
// 汇率监听
|
||||||
c.AddJob("@every 60s", UsdtRateJob{})
|
c.AddJob("@every 60s", UsdtRateJob{})
|
||||||
// trc20钱包监听
|
// trc20钱包监听
|
||||||
c.AddJob("@every 10s", ListenTrc20Job{})
|
c.AddJob("@every 5s", ListenTrc20Job{})
|
||||||
c.Start()
|
c.Start()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,210 @@
|
|||||||
|
## 写在前面
|
||||||
|
|
||||||
|
- 此教程专为有洁癖的宝宝们准备。不使用任何一键安装脚本。面板党可以退散了!!
|
||||||
|
- 本人测试环境是 Debian 11 其他的没测试。
|
||||||
|
## 1.下载源代码
|
||||||
|
```bash
|
||||||
|
cd /var/www/
|
||||||
|
mkdir epusdt
|
||||||
|
chmod 777 -R /var/www/epusdt
|
||||||
|
cd epusdt
|
||||||
|
wget https://github.com/assimon/epusdt/releases/download/v0.0.2/epusdt_v0.0.2_Linux_x86_64.tar.gz
|
||||||
|
tar -xzf epusdt_v0.0.2_Linux_x86_64.tar.gz
|
||||||
|
rm epusdt_v0.0.2_Linux_x86_64.tar.gz
|
||||||
|
```
|
||||||
|
## 2.导入Sql
|
||||||
|
- 创建sql文件
|
||||||
|
```bash
|
||||||
|
nano epusdt.sql
|
||||||
|
```
|
||||||
|
然后复制下面的
|
||||||
|
```sql
|
||||||
|
-- auto-generated definition
|
||||||
|
use epusdt;
|
||||||
|
create table orders
|
||||||
|
(
|
||||||
|
id int auto_increment
|
||||||
|
primary key,
|
||||||
|
trade_id varchar(32) not null comment 'epusdt订单号',
|
||||||
|
order_id varchar(32) not null comment '客户交易id',
|
||||||
|
block_transaction_id varchar(128) null comment '区块唯一编号',
|
||||||
|
actual_amount decimal(19, 4) not null comment '订单实际需要支付的金额,保留4位小数',
|
||||||
|
amount decimal(19, 4) not null comment '订单金额,保留4位小数',
|
||||||
|
token varchar(50) not null comment '所属钱包地址',
|
||||||
|
status int default 1 not null comment '1:等待支付,2:支付成功,3:已过期',
|
||||||
|
notify_url varchar(128) not null comment '异步回调地址',
|
||||||
|
redirect_url varchar(128) null comment '同步回调地址',
|
||||||
|
callback_num int default 0 null comment '回调次数',
|
||||||
|
callback_confirm int default 2 null comment '回调是否已确认? 1是 2否',
|
||||||
|
created_at timestamp null,
|
||||||
|
updated_at timestamp null,
|
||||||
|
deleted_at timestamp null,
|
||||||
|
constraint orders_order_id_uindex
|
||||||
|
unique (order_id),
|
||||||
|
constraint orders_trade_id_uindex
|
||||||
|
unique (trade_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
create index orders_block_transaction_id_index
|
||||||
|
on orders (block_transaction_id);
|
||||||
|
|
||||||
|
-- auto-generated definition
|
||||||
|
create table wallet_address
|
||||||
|
(
|
||||||
|
id int auto_increment
|
||||||
|
primary key,
|
||||||
|
token varchar(50) not null comment '钱包token',
|
||||||
|
status int default 1 not null comment '1:启用 2:禁用',
|
||||||
|
created_at timestamp null,
|
||||||
|
updated_at timestamp null,
|
||||||
|
deleted_at timestamp null
|
||||||
|
)
|
||||||
|
comment '钱包表';
|
||||||
|
|
||||||
|
create index wallet_address_token_index
|
||||||
|
on wallet_address (token);
|
||||||
|
```
|
||||||
|
`ctrl+x` 退出,按 `Y`保存 再按回车就好了
|
||||||
|
- 创建数据库
|
||||||
|
```bash
|
||||||
|
mysql
|
||||||
|
```
|
||||||
|
接下来输入命令
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE [这里替换为数据库名] ;
|
||||||
|
GRANT ALL ON [这里替换为数据库名].* TO '[这里替换为用户名]'@'localhost' IDENTIFIED BY '[这里替换为密码]' WITH GRANT OPTION;
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
EXIT
|
||||||
|
```
|
||||||
|
- 导入sql文件
|
||||||
|
```bash
|
||||||
|
mysql -u[用户名] -p[密码] < epusdt.sql
|
||||||
|
```
|
||||||
|
## 3.配置反向代理
|
||||||
|
```bash
|
||||||
|
nano /etc/nginx/sites-enabled/epusdt
|
||||||
|
```
|
||||||
|
你可以参考以下我的配置文件,注意更改域名。
|
||||||
|
```bash
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name domain.com;
|
||||||
|
return 301 https://domain.com$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
server_name domain.com;
|
||||||
|
ssl_certificate /etc/nginx/sslcert/cert.crt;
|
||||||
|
ssl_certificate_key /etc/nginx/sslcert/key.key;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
## 4.赋予Epusdt执行权限
|
||||||
|
`linux`服务器需要赋予`Epust`执行权限方可启动。
|
||||||
|
执行命令```chmod +x epusdt```赋予权限
|
||||||
|
## 5、配置Epusdt
|
||||||
|
执行命令
|
||||||
|
```bash
|
||||||
|
mv .env.example .env
|
||||||
|
nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
```dotenv
|
||||||
|
app_name=epusdt
|
||||||
|
#下面配置你的域名,收银台会需要
|
||||||
|
app_uri=https://upay.dujiaoka.com
|
||||||
|
#是否开启debug,默认false
|
||||||
|
app_debug=false
|
||||||
|
#http服务监听端口
|
||||||
|
http_listen=:8000
|
||||||
|
#静态资源文件目录
|
||||||
|
static_path=/static
|
||||||
|
#缓存路径
|
||||||
|
runtime_root_path=/runtime
|
||||||
|
#日志配置
|
||||||
|
log_save_path=/logs
|
||||||
|
log_max_size=32
|
||||||
|
log_max_age=7
|
||||||
|
max_backups=3
|
||||||
|
# mysql配置
|
||||||
|
mysql_host=127.0.0.1
|
||||||
|
mysql_port=3306
|
||||||
|
mysql_user=mysql账号
|
||||||
|
mysql_passwd=mysql密码
|
||||||
|
mysql_database=数据库
|
||||||
|
mysql_table_prefix=
|
||||||
|
mysql_max_idle_conns=10
|
||||||
|
mysql_max_open_conns=100
|
||||||
|
mysql_max_life_time=6
|
||||||
|
# redis配置
|
||||||
|
redis_host=127.0.0.1
|
||||||
|
redis_port=6379
|
||||||
|
redis_passwd=
|
||||||
|
redis_db=5
|
||||||
|
redis_pool_size=5
|
||||||
|
redis_max_retries=3
|
||||||
|
redis_idle_timeout=1000
|
||||||
|
# 消息队列配置
|
||||||
|
queue_concurrency=10
|
||||||
|
queue_level_critical=6
|
||||||
|
queue_level_default=3
|
||||||
|
queue_level_low=1
|
||||||
|
#机器人Apitoken
|
||||||
|
tg_bot_token=
|
||||||
|
#telegram代理url(大陆地区服务器可使用一台国外服务器做反代tg的url),如果运行的本来就是境外服务器,则无需填写
|
||||||
|
tg_proxy=
|
||||||
|
#管理员userid
|
||||||
|
tg_manage=
|
||||||
|
#api接口认证token(用于发起交易的签名认证,请勿外泄)
|
||||||
|
api_auth_token=
|
||||||
|
#订单过期时间(单位分钟)
|
||||||
|
order_expiration_time=10
|
||||||
|
#强制汇率(设置此参数后每笔交易将按照此汇率计算,例如:6.4)
|
||||||
|
forced_usdt_rate=
|
||||||
|
```
|
||||||
|
⚠️注意:配置文件里面不认识的不要修改,留空即可,不会改又要瞎改,除非你对项目源代码很熟悉很有信心😁
|
||||||
|
## 6、配置supervisor
|
||||||
|
为了保证`Epusdt`常驻后台运行,我们需要配置`supervisor`来实现进程监听
|
||||||
|
```bash
|
||||||
|
nano /etc/supervisor/conf.d/epusdt.conf
|
||||||
|
```
|
||||||
|
你可以参考以下我的配置文件,注意更改路径。
|
||||||
|
```conf
|
||||||
|
[program:epusdt]
|
||||||
|
process_name=epusdt
|
||||||
|
directory=/var/www/epusdt
|
||||||
|
command=/var/www/epusdt/epusdt http start
|
||||||
|
autostart=true
|
||||||
|
autorestart=true
|
||||||
|
user=www-data
|
||||||
|
numprocs=1
|
||||||
|
redirect_stderr=true
|
||||||
|
stdout_logfile=/var/log/supervisor/epusdt.log
|
||||||
|
```
|
||||||
|
接下来输入命令
|
||||||
|
```bash
|
||||||
|
supervisorctl reread
|
||||||
|
supervisorctl update
|
||||||
|
supervisorctl start epusdt
|
||||||
|
supervisorctl tail epusdt
|
||||||
|
```
|
||||||
|
出现下图,即为配置成功
|
||||||
|
```bash
|
||||||
|
_____ _ _
|
||||||
|
| ____|_ __ _ _ ___ __| | |_
|
||||||
|
| _| | '_ \| | | / __|/ _` | __|
|
||||||
|
| |___| |_) | |_| \__ \ (_| | |_
|
||||||
|
|_____| .__/ \__,_|___/\__,_|\__|
|
||||||
|
|_|
|
||||||
|
Epusdt version(0.0.2) Powered by assimon https://github.com/assimon/epusdt
|
||||||
|
⇨ http server started on [::]:8000
|
||||||
|
```
|
||||||
|
## 其他注意事项
|
||||||
|
- 1.所有`.env`配置文件有了修改后都需要重启supervisor进程 `supervisorctl restart epusdt`
|
||||||
|
- 2.教程所示的目录均为参考,请勿1:1照抄,根据自己实际情况来
|
||||||
Reference in New Issue
Block a user