skillpp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPATIBILITY.md +58 -0
- package/LICENSE +21 -0
- package/README.md +307 -0
- package/README.zh-CN.md +307 -0
- package/SKILL.md +490 -0
- package/adapters/binance-ai.md +22 -0
- package/adapters/claude.md +21 -0
- package/adapters/gemini.md +26 -0
- package/adapters/gpt.md +28 -0
- package/adapters/kimi.md +26 -0
- package/adapters/mimo.md +22 -0
- package/adapters/openclaw.md +29 -0
- package/assets/skillpp-banner.png +0 -0
- package/package.json +59 -0
- package/pipelines.md +310 -0
- package/prompts/newbie-mode.md +48 -0
- package/prompts/router-prompt.md +32 -0
- package/prompts/universal-system-prompt.md +41 -0
- package/registry.md +209 -0
- package/rules.md +323 -0
- package/schemas/audit.schema.json +67 -0
- package/schemas/checkpoint.schema.json +86 -0
- package/schemas/handoff.schema.json +82 -0
- package/schemas/token.schema.json +36 -0
- package/scripts/compatibility-check.mjs +130 -0
- package/scripts/selftest.mjs +384 -0
- package/scripts/skillpp.mjs +448 -0
- package/scripts/validate-skillpp.mjs +140 -0
- package/skillpp.manifest.json +714 -0
- package/skills/audit-plus/SKILL.md +612 -0
- package/skills/binance/binance/CHANGELOG.md +112 -0
- package/skills/binance/binance/LICENSE.md +9 -0
- package/skills/binance/binance/SKILL.md +69 -0
- package/skills/binance/binance/references/algo.md +21 -0
- package/skills/binance/binance/references/alpha.md +9 -0
- package/skills/binance/binance/references/auth.md +32 -0
- package/skills/binance/binance/references/c2c.md +5 -0
- package/skills/binance/binance/references/convert.md +19 -0
- package/skills/binance/binance/references/copy-trading.md +6 -0
- package/skills/binance/binance/references/crypto-loan.md +27 -0
- package/skills/binance/binance/references/derivatives-options-streams.md +25 -0
- package/skills/binance/binance/references/derivatives-options.md +85 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin-pro-streams.md +5 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin-pro.md +34 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin-streams.md +5 -0
- package/skills/binance/binance/references/derivatives-portfolio-margin.md +146 -0
- package/skills/binance/binance/references/dual-investment.md +15 -0
- package/skills/binance/binance/references/fiat.md +9 -0
- package/skills/binance/binance/references/futures-coin-streams.md +29 -0
- package/skills/binance/binance/references/futures-coin.md +109 -0
- package/skills/binance/binance/references/futures-usds-streams.md +35 -0
- package/skills/binance/binance/references/futures-usds.md +144 -0
- package/skills/binance/binance/references/gift-card.md +10 -0
- package/skills/binance/binance/references/margin-trading-streams.md +6 -0
- package/skills/binance/binance/references/margin-trading.md +101 -0
- package/skills/binance/binance/references/mining.md +17 -0
- package/skills/binance/binance/references/pay.md +5 -0
- package/skills/binance/binance/references/rebate.md +5 -0
- package/skills/binance/binance/references/simple-earn.md +56 -0
- package/skills/binance/binance/references/spot-streams.md +25 -0
- package/skills/binance/binance/references/spot.md +114 -0
- package/skills/binance/binance/references/staking.md +59 -0
- package/skills/binance/binance/references/sub-account.md +67 -0
- package/skills/binance/binance/references/vip-loan.md +27 -0
- package/skills/binance/binance/references/wallet.md +75 -0
- package/skills/binance/fiat/CHANGELOG.md +11 -0
- package/skills/binance/fiat/LICENSE.md +9 -0
- package/skills/binance/fiat/SKILL.md +169 -0
- package/skills/binance/fiat/references/authentication.md +126 -0
- package/skills/binance/fiat/references/sapi-endpoints.md +217 -0
- package/skills/binance/onchain-pay/.local.md.example +10 -0
- package/skills/binance/onchain-pay/CHANGELOG.md +20 -0
- package/skills/binance/onchain-pay/LICENSE.md +9 -0
- package/skills/binance/onchain-pay/SKILL.md +466 -0
- package/skills/binance/onchain-pay/references/authentication.md +92 -0
- package/skills/binance/onchain-pay/scripts/sign_and_call.sh +52 -0
- package/skills/binance/p2p/CHANGELOG.md +33 -0
- package/skills/binance/p2p/LICENSE.md +9 -0
- package/skills/binance/p2p/SKILL.md +1082 -0
- package/skills/binance/p2p/references/agent-sapi-api.md +795 -0
- package/skills/binance/p2p/references/authentication.md +100 -0
- package/skills/binance/payment/SKILL.md +824 -0
- package/skills/binance/payment/common.py +560 -0
- package/skills/binance/payment/payment_skill.py +86 -0
- package/skills/binance/payment/receive.py +109 -0
- package/skills/binance/payment/references/setup-guide.md +77 -0
- package/skills/binance/payment/requirements.txt +4 -0
- package/skills/binance/payment/send.py +952 -0
- package/skills/binance/payment/send_extension/__init__.py +43 -0
- package/skills/binance/payment/send_extension/base.py +48 -0
- package/skills/binance/payment/send_extension/c2c.py +193 -0
- package/skills/binance/payment/send_extension/pix.py +316 -0
- package/skills/binance/square-post/README.md +62 -0
- package/skills/binance/square-post/SKILL.md +171 -0
- package/skills/binance/square-post/scripts/lib.mjs +175 -0
- package/skills/binance/square-post/scripts/post-image.mjs +80 -0
- package/skills/binance/square-post/scripts/post-text.mjs +41 -0
- package/skills/binance/square-post/scripts/post-video.mjs +110 -0
- package/skills/binance/square-post/scripts/save-key.mjs +34 -0
- package/skills/binance-web3/binance-agentic-wallet/SKILL.md +150 -0
- package/skills/binance-web3/binance-agentic-wallet/references/authentication.md +136 -0
- package/skills/binance-web3/binance-agentic-wallet/references/limit-order.md +204 -0
- package/skills/binance-web3/binance-agentic-wallet/references/market-order.md +179 -0
- package/skills/binance-web3/binance-agentic-wallet/references/prediction.md +489 -0
- package/skills/binance-web3/binance-agentic-wallet/references/preflight.md +66 -0
- package/skills/binance-web3/binance-agentic-wallet/references/security.md +47 -0
- package/skills/binance-web3/binance-agentic-wallet/references/send.md +53 -0
- package/skills/binance-web3/binance-agentic-wallet/references/wallet-setting.md +86 -0
- package/skills/binance-web3/binance-agentic-wallet/references/wallet-view.md +312 -0
- package/skills/binance-web3/binance-agentic-wallet/references/x402-payment.md +259 -0
- package/skills/binance-web3/binance-tokenized-securities-info/SKILL.md +613 -0
- package/skills/binance-web3/crypto-market-rank/SKILL.md +91 -0
- package/skills/binance-web3/crypto-market-rank/references/cli.md +219 -0
- package/skills/binance-web3/crypto-market-rank/scripts/cli.mjs +149 -0
- package/skills/binance-web3/meme-rush/SKILL.md +72 -0
- package/skills/binance-web3/meme-rush/references/cli.md +158 -0
- package/skills/binance-web3/meme-rush/scripts/cli.mjs +101 -0
- package/skills/binance-web3/query-address-info/SKILL.md +61 -0
- package/skills/binance-web3/query-address-info/references/cli.md +56 -0
- package/skills/binance-web3/query-address-info/scripts/cli.mjs +132 -0
- package/skills/binance-web3/query-token-audit/SKILL.md +162 -0
- package/skills/binance-web3/query-token-info/SKILL.md +83 -0
- package/skills/binance-web3/query-token-info/references/cli.md +135 -0
- package/skills/binance-web3/query-token-info/scripts/cli.mjs +112 -0
- package/skills/binance-web3/trading-signal/SKILL.md +66 -0
- package/skills/binance-web3/trading-signal/references/cli.md +90 -0
- package/skills/binance-web3/trading-signal/scripts/cli.mjs +92 -0
- package/skills/four-meme/four-guard/API-Contract-TaxToken.md +277 -0
- package/skills/four-meme/four-guard/API-CreateToken.02-02-2026.md +285 -0
- package/skills/four-meme/four-guard/API-Documents.03-03-2026.md +789 -0
- package/skills/four-meme/four-guard/AgentIdentifier.abi +585 -0
- package/skills/four-meme/four-guard/README.md +21 -0
- package/skills/four-meme/four-guard/SKILL.md +31 -0
- package/skills/four-meme/four-guard/TaxToken.abi +969 -0
- package/skills/four-meme/four-guard/TokenIdentifierSample.js_ +81 -0
- package/skills/four-meme/four-guard/TokenIdentifierSample.sol +69 -0
- package/skills/four-meme/four-guard/TokenManager.lite.abi +836 -0
- package/skills/four-meme/four-guard/TokenManager2.lite.abi +2325 -0
- package/skills/four-meme/four-guard/TokenManagerHelper3.abi +999 -0
- package/skills/four-meme/four-guard/go.mod +36 -0
- package/skills/four-meme/four-guard/go.sum +127 -0
- package/skills/four-meme/four-guard/main.go +183 -0
- package/skills/four-meme/four-meme-ai/SKILL.md +31 -0
- package/skills/four-meme/four-meme-ai/references/agent-creator-and-wallets.md +87 -0
- package/skills/four-meme/four-meme-ai/references/api-create-token.md +55 -0
- package/skills/four-meme/four-meme-ai/references/contract-addresses.md +47 -0
- package/skills/four-meme/four-meme-ai/references/create-token-scripts.md +131 -0
- package/skills/four-meme/four-meme-ai/references/errors.md +29 -0
- package/skills/four-meme/four-meme-ai/references/event-listening.md +75 -0
- package/skills/four-meme/four-meme-ai/references/execute-trade.md +31 -0
- package/skills/four-meme/four-meme-ai/references/tax-token-query.md +38 -0
- package/skills/four-meme/four-meme-ai/references/token-query-api.md +44 -0
- package/skills/four-meme/four-meme-ai/references/token-tax-info.md +77 -0
- package/skills/four-meme/four-meme-ai/scripts/8004-balance.ts +52 -0
- package/skills/four-meme/four-meme-ai/scripts/8004-register.ts +108 -0
- package/skills/four-meme/four-meme-ai/scripts/create-token-api.ts +321 -0
- package/skills/four-meme/four-meme-ai/scripts/create-token-chain.ts +102 -0
- package/skills/four-meme/four-meme-ai/scripts/create-token-instant.ts +106 -0
- package/skills/four-meme/four-meme-ai/scripts/execute-buy.ts +198 -0
- package/skills/four-meme/four-meme-ai/scripts/execute-sell.ts +150 -0
- package/skills/four-meme/four-meme-ai/scripts/get-public-config.ts +25 -0
- package/skills/four-meme/four-meme-ai/scripts/get-recent-events.ts +76 -0
- package/skills/four-meme/four-meme-ai/scripts/get-tax-token-info.ts +69 -0
- package/skills/four-meme/four-meme-ai/scripts/get-token-info.ts +94 -0
- package/skills/four-meme/four-meme-ai/scripts/quote-buy.ts +85 -0
- package/skills/four-meme/four-meme-ai/scripts/quote-sell.ts +66 -0
- package/skills/four-meme/four-meme-ai/scripts/send-token.ts +98 -0
- package/skills/four-meme/four-meme-ai/scripts/token-get.ts +31 -0
- package/skills/four-meme/four-meme-ai/scripts/token-list.ts +134 -0
- package/skills/four-meme/four-meme-ai/scripts/token-rankings.ts +162 -0
- package/skills/four-meme/four-meme-ai/scripts/verify-events.ts +47 -0
- package/skills/four-meme/four-meme-integration/SKILL.md +374 -0
- package/skills/four-meme/four-meme-integration/references/agent-creator-and-wallets.md +87 -0
- package/skills/four-meme/four-meme-integration/references/api-create-token.md +55 -0
- package/skills/four-meme/four-meme-integration/references/contract-addresses.md +47 -0
- package/skills/four-meme/four-meme-integration/references/create-token-scripts.md +131 -0
- package/skills/four-meme/four-meme-integration/references/errors.md +29 -0
- package/skills/four-meme/four-meme-integration/references/event-listening.md +75 -0
- package/skills/four-meme/four-meme-integration/references/execute-trade.md +31 -0
- package/skills/four-meme/four-meme-integration/references/tax-token-query.md +38 -0
- package/skills/four-meme/four-meme-integration/references/token-query-api.md +44 -0
- package/skills/four-meme/four-meme-integration/references/token-tax-info.md +77 -0
- package/skills/four-meme/four-meme-integration/scripts/8004-balance.ts +52 -0
- package/skills/four-meme/four-meme-integration/scripts/8004-register.ts +108 -0
- package/skills/four-meme/four-meme-integration/scripts/create-token-api.ts +321 -0
- package/skills/four-meme/four-meme-integration/scripts/create-token-chain.ts +102 -0
- package/skills/four-meme/four-meme-integration/scripts/create-token-instant.ts +106 -0
- package/skills/four-meme/four-meme-integration/scripts/execute-buy.ts +198 -0
- package/skills/four-meme/four-meme-integration/scripts/execute-sell.ts +150 -0
- package/skills/four-meme/four-meme-integration/scripts/get-public-config.ts +25 -0
- package/skills/four-meme/four-meme-integration/scripts/get-recent-events.ts +76 -0
- package/skills/four-meme/four-meme-integration/scripts/get-tax-token-info.ts +69 -0
- package/skills/four-meme/four-meme-integration/scripts/get-token-info.ts +94 -0
- package/skills/four-meme/four-meme-integration/scripts/quote-buy.ts +85 -0
- package/skills/four-meme/four-meme-integration/scripts/quote-sell.ts +66 -0
- package/skills/four-meme/four-meme-integration/scripts/send-token.ts +98 -0
- package/skills/four-meme/four-meme-integration/scripts/token-get.ts +31 -0
- package/skills/four-meme/four-meme-integration/scripts/token-list.ts +134 -0
- package/skills/four-meme/four-meme-integration/scripts/token-rankings.ts +162 -0
- package/skills/four-meme/four-meme-integration/scripts/verify-events.ts +47 -0
- package/skills/skillpp/contract-profiler/SKILL.md +118 -0
- package/skills/skillpp/newbie-tutor/SKILL.md +85 -0
- package/skills/skillpp/opportunity-board/SKILL.md +87 -0
- package/skills/skillpp/risk-fusion/SKILL.md +146 -0
- package/skills/skillpp/scam-pattern-lab/SKILL.md +115 -0
- package/skills/skillpp/wallet-doctor/SKILL.md +119 -0
- package/skills/skillpp/watchtower/SKILL.md +72 -0
- package/tests/compatibility/v0.1.0.json +117 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module four-guard_go_full
|
|
2
|
+
|
|
3
|
+
go 1.20
|
|
4
|
+
|
|
5
|
+
require (
|
|
6
|
+
github.com/ethereum/go-ethereum v1.13.15
|
|
7
|
+
github.com/joho/godotenv v1.5.1
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
require (
|
|
11
|
+
github.com/Microsoft/go-winio v0.6.1 // indirect
|
|
12
|
+
github.com/StackExchange/wmi v1.2.1 // indirect
|
|
13
|
+
github.com/bits-and-blooms/bitset v1.10.0 // indirect
|
|
14
|
+
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
|
|
15
|
+
github.com/consensys/bavard v0.1.13 // indirect
|
|
16
|
+
github.com/consensys/gnark-crypto v0.12.1 // indirect
|
|
17
|
+
github.com/crate-crypto/go-kzg-4844 v0.7.0 // indirect
|
|
18
|
+
github.com/deckarep/golang-set/v2 v2.1.0 // indirect
|
|
19
|
+
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
|
|
20
|
+
github.com/ethereum/c-kzg-4844 v0.4.0 // indirect
|
|
21
|
+
github.com/go-ole/go-ole v1.3.0 // indirect
|
|
22
|
+
github.com/gorilla/websocket v1.4.2 // indirect
|
|
23
|
+
github.com/holiman/uint256 v1.2.4 // indirect
|
|
24
|
+
github.com/mmcloughlin/addchain v0.4.0 // indirect
|
|
25
|
+
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
|
|
26
|
+
github.com/supranational/blst v0.3.11 // indirect
|
|
27
|
+
github.com/tklauser/go-sysconf v0.3.12 // indirect
|
|
28
|
+
github.com/tklauser/numcpus v0.6.1 // indirect
|
|
29
|
+
golang.org/x/crypto v0.17.0 // indirect
|
|
30
|
+
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
|
|
31
|
+
golang.org/x/mod v0.14.0 // indirect
|
|
32
|
+
golang.org/x/sync v0.5.0 // indirect
|
|
33
|
+
golang.org/x/sys v0.16.0 // indirect
|
|
34
|
+
golang.org/x/tools v0.15.0 // indirect
|
|
35
|
+
rsc.io/tmplfunc v0.0.3 // indirect
|
|
36
|
+
)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
|
|
2
|
+
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
|
|
3
|
+
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
|
4
|
+
github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
|
|
5
|
+
github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
|
|
6
|
+
github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40=
|
|
7
|
+
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
|
8
|
+
github.com/bits-and-blooms/bitset v1.10.0 h1:ePXTeiPEazB5+opbv5fr8umg2R/1NlzgDsyepwsSr88=
|
|
9
|
+
github.com/bits-and-blooms/bitset v1.10.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8=
|
|
10
|
+
github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k=
|
|
11
|
+
github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU=
|
|
12
|
+
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U=
|
|
13
|
+
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
|
14
|
+
github.com/cockroachdb/errors v1.8.1 h1:A5+txlVZfOqFBDa4mGz2bUWSp0aHElvHX2bKkdbQu+Y=
|
|
15
|
+
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f h1:o/kfcElHqOiXqcou5a3rIlMc7oJbMQkeLk0VQJ7zgqY=
|
|
16
|
+
github.com/cockroachdb/pebble v0.0.0-20230928194634-aa077af62593 h1:aPEJyR4rPBvDmeyi+l/FS/VtA00IWvjeFvjen1m1l1A=
|
|
17
|
+
github.com/cockroachdb/redact v1.0.8 h1:8QG/764wK+vmEYoOlfobpe12EQcS81ukx/a4hdVMxNw=
|
|
18
|
+
github.com/cockroachdb/sentry-go v0.6.1-cockroachdb.2 h1:IKgmqgMQlVJIZj19CdocBeSfSaiCbEBZGKODaixqtHM=
|
|
19
|
+
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo=
|
|
20
|
+
github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ=
|
|
21
|
+
github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI=
|
|
22
|
+
github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M=
|
|
23
|
+
github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY=
|
|
24
|
+
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
|
|
25
|
+
github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ=
|
|
26
|
+
github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA=
|
|
27
|
+
github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc=
|
|
28
|
+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
|
29
|
+
github.com/deckarep/golang-set/v2 v2.1.0 h1:g47V4Or+DUdzbs8FxCCmgb6VYd+ptPAngjM6dtGktsI=
|
|
30
|
+
github.com/deckarep/golang-set/v2 v2.1.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
|
|
31
|
+
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
|
|
32
|
+
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
|
|
33
|
+
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
|
|
34
|
+
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
|
|
35
|
+
github.com/ethereum/c-kzg-4844 v0.4.0 h1:3MS1s4JtA868KpJxroZoepdV0ZKBp3u/O5HcZ7R3nlY=
|
|
36
|
+
github.com/ethereum/c-kzg-4844 v0.4.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0=
|
|
37
|
+
github.com/ethereum/go-ethereum v1.13.15 h1:U7sSGYGo4SPjP6iNIifNoyIAiNjrmQkz6EwQG+/EZWo=
|
|
38
|
+
github.com/ethereum/go-ethereum v1.13.15/go.mod h1:TN8ZiHrdJwSe8Cb6x+p0hs5CxhJZPbqB7hHkaUXcmIU=
|
|
39
|
+
github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA=
|
|
40
|
+
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
|
|
41
|
+
github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI=
|
|
42
|
+
github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE=
|
|
43
|
+
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
|
|
44
|
+
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
|
|
45
|
+
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
|
|
46
|
+
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
|
|
47
|
+
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
|
48
|
+
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
|
49
|
+
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
|
50
|
+
github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk=
|
|
51
|
+
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
|
|
52
|
+
github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
|
|
53
|
+
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
|
54
|
+
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
|
|
55
|
+
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
|
56
|
+
github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE=
|
|
57
|
+
github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4=
|
|
58
|
+
github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao=
|
|
59
|
+
github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU=
|
|
60
|
+
github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E=
|
|
61
|
+
github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc=
|
|
62
|
+
github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus=
|
|
63
|
+
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
|
64
|
+
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
|
65
|
+
github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw=
|
|
66
|
+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
|
67
|
+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
|
68
|
+
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
|
|
69
|
+
github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c=
|
|
70
|
+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
|
71
|
+
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
|
|
72
|
+
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
|
|
73
|
+
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
|
|
74
|
+
github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag=
|
|
75
|
+
github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A=
|
|
76
|
+
github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY=
|
|
77
|
+
github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU=
|
|
78
|
+
github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU=
|
|
79
|
+
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
|
80
|
+
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
|
81
|
+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
|
82
|
+
github.com/prometheus/client_golang v1.12.0 h1:C+UIj/QWtmqY13Arb8kwMt5j34/0Z2iKamrJ+ryC0Gg=
|
|
83
|
+
github.com/prometheus/client_model v0.2.1-0.20210607210712-147c58e9608a h1:CmF68hwI0XsOQ5UwlBopMi2Ow4Pbg32akc4KIVCOm+Y=
|
|
84
|
+
github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
|
|
85
|
+
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
|
|
86
|
+
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
|
87
|
+
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
|
|
88
|
+
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
|
|
89
|
+
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
|
90
|
+
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU=
|
|
91
|
+
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
|
|
92
|
+
github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA=
|
|
93
|
+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
|
94
|
+
github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4=
|
|
95
|
+
github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw=
|
|
96
|
+
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY=
|
|
97
|
+
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
|
|
98
|
+
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
|
|
99
|
+
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
|
|
100
|
+
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
|
|
101
|
+
github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8=
|
|
102
|
+
github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs=
|
|
103
|
+
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
|
|
104
|
+
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
|
105
|
+
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
|
106
|
+
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
|
|
107
|
+
golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
|
|
108
|
+
golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
|
|
109
|
+
golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
|
110
|
+
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
|
|
111
|
+
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
|
112
|
+
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
113
|
+
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
114
|
+
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
115
|
+
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
116
|
+
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
|
|
117
|
+
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
|
118
|
+
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
|
119
|
+
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
|
120
|
+
golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
|
|
121
|
+
golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
|
|
122
|
+
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
|
|
123
|
+
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
|
|
124
|
+
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
|
125
|
+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|
126
|
+
rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU=
|
|
127
|
+
rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA=
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"context"
|
|
5
|
+
"log"
|
|
6
|
+
"math/big"
|
|
7
|
+
"os"
|
|
8
|
+
"os/signal"
|
|
9
|
+
"strconv"
|
|
10
|
+
"strings"
|
|
11
|
+
"sync"
|
|
12
|
+
"syscall"
|
|
13
|
+
|
|
14
|
+
"github.com/ethereum/go-ethereum"
|
|
15
|
+
"github.com/ethereum/go-ethereum/common"
|
|
16
|
+
gethtypes "github.com/ethereum/go-ethereum/core/types"
|
|
17
|
+
"github.com/ethereum/go-ethereum/crypto"
|
|
18
|
+
"github.com/ethereum/go-ethereum/ethclient"
|
|
19
|
+
"github.com/joho/godotenv"
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
// NOTE: This is a compact, readable implementation intended for testing.
|
|
23
|
+
// It intentionally omits some micro-optimizations from the earlier drafts.
|
|
24
|
+
// DO NOT put your private key in source code. Use .env file.
|
|
25
|
+
|
|
26
|
+
var (
|
|
27
|
+
ChainID = big.NewInt(56)
|
|
28
|
+
FactoryAddr = common.HexToAddress("0xca143ce32fe78f1f7019d7d551a6402fc5350c73")
|
|
29
|
+
RouterAddr = common.HexToAddress("0x10ED43C718714eb63d5aA57B78B54704E256024E")
|
|
30
|
+
WBNB = common.HexToAddress("0xBB4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c")
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
const factoryABIJson = `[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"}]`
|
|
34
|
+
|
|
35
|
+
const erc20ABIJson = `[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":""}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":""}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":""}],"stateMutability":"view","type":"function"}]`
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
type Config struct {
|
|
39
|
+
WssEndpoints []string
|
|
40
|
+
HttpBroadcasts []string
|
|
41
|
+
PrivateKey string
|
|
42
|
+
SpendBNB string
|
|
43
|
+
MinLiqBNB string
|
|
44
|
+
SlippageBps int64
|
|
45
|
+
DryRun bool
|
|
46
|
+
OnlyWbnb bool
|
|
47
|
+
SellCooldownMs int64
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
func loadConfig() *Config {
|
|
51
|
+
_ = godotenv.Load()
|
|
52
|
+
ws := splitCSV(os.Getenv("WSS_ENDPOINTS"))
|
|
53
|
+
http := splitCSV(os.Getenv("HTTP_BROADCASTS"))
|
|
54
|
+
pk := os.Getenv("PRIVATE_KEY")
|
|
55
|
+
dry := strings.ToLower(os.Getenv("DRY_RUN"))=="true"
|
|
56
|
+
only := strings.ToLower(os.Getenv("ONLY_WBNB_PAIRS"))!="false"
|
|
57
|
+
return &Config{
|
|
58
|
+
WssEndpoints: ws,
|
|
59
|
+
HttpBroadcasts: http,
|
|
60
|
+
PrivateKey: pk,
|
|
61
|
+
SpendBNB: os.Getenv("SPEND_BNB"),
|
|
62
|
+
MinLiqBNB: os.Getenv("MIN_LIQ_BNB"),
|
|
63
|
+
SlippageBps: int64(mustInt("SLIPPAGE_BPS",300)),
|
|
64
|
+
DryRun: dry,
|
|
65
|
+
OnlyWbnb: only,
|
|
66
|
+
SellCooldownMs: mustInt("SELL_COOLDOWN_MS",0),
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
func splitCSV(s string) []string {
|
|
71
|
+
var out []string
|
|
72
|
+
for _, p := range strings.Split(strings.TrimSpace(s), ",") {
|
|
73
|
+
p = strings.TrimSpace(p)
|
|
74
|
+
if p!="" { out = append(out, p) }
|
|
75
|
+
}
|
|
76
|
+
return out
|
|
77
|
+
}
|
|
78
|
+
func mustInt(k string, def int64) int64 {
|
|
79
|
+
raw := strings.TrimSpace(os.Getenv(k))
|
|
80
|
+
if raw=="" { return def }
|
|
81
|
+
v, err := strconv.ParseInt(raw,10,64)
|
|
82
|
+
if err!=nil { return def }
|
|
83
|
+
return v
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
func main() {
|
|
87
|
+
cfg := loadConfig()
|
|
88
|
+
if len(cfg.WssEndpoints)==0 {
|
|
89
|
+
log.Fatal("No WSS endpoints configured in .env (WSS_ENDPOINTS)")
|
|
90
|
+
}
|
|
91
|
+
// parse ABIs (currently not used in this simplified version)
|
|
92
|
+
// factoryABI := mustParseABI(factoryABIJson)
|
|
93
|
+
// erc20ABI := mustParseABI(erc20ABIJson)
|
|
94
|
+
|
|
95
|
+
// prepare WS clients (use the first for calls)
|
|
96
|
+
var clients []*ethclient.Client
|
|
97
|
+
for _, u := range cfg.WssEndpoints {
|
|
98
|
+
c, err := ethclient.Dial(u)
|
|
99
|
+
if err != nil {
|
|
100
|
+
log.Println("WS dial err:", u, err)
|
|
101
|
+
continue
|
|
102
|
+
}
|
|
103
|
+
clients = append(clients, c)
|
|
104
|
+
}
|
|
105
|
+
if len(clients)==0 {
|
|
106
|
+
log.Fatal("no working WS clients")
|
|
107
|
+
}
|
|
108
|
+
primary := clients[0]
|
|
109
|
+
|
|
110
|
+
ctx, cancel := context.WithCancel(context.Background())
|
|
111
|
+
defer cancel()
|
|
112
|
+
go func(){
|
|
113
|
+
sig := make(chan os.Signal,1)
|
|
114
|
+
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
|
|
115
|
+
<-sig
|
|
116
|
+
log.Println("shutting down")
|
|
117
|
+
cancel()
|
|
118
|
+
}()
|
|
119
|
+
|
|
120
|
+
// Subscribe PairCreated (merged across WS clients - simple approach: subscribe on primary)
|
|
121
|
+
q := ethereum.FilterQuery{
|
|
122
|
+
Addresses: []common.Address{FactoryAddr},
|
|
123
|
+
Topics: [][]common.Hash{{crypto.Keccak256Hash([]byte("PairCreated(address,address,address,uint256)"))}},
|
|
124
|
+
}
|
|
125
|
+
logs := make(chan gethtypes.Log, 1024)
|
|
126
|
+
sub, err := primary.SubscribeFilterLogs(ctx, q, logs)
|
|
127
|
+
if err!=nil {
|
|
128
|
+
log.Fatal("PairCreated subscribe err:", err)
|
|
129
|
+
}
|
|
130
|
+
log.Println("subscribed to PairCreated, listening...")
|
|
131
|
+
|
|
132
|
+
// state for sell-once per token
|
|
133
|
+
var soldMap sync.Map
|
|
134
|
+
|
|
135
|
+
for {
|
|
136
|
+
select {
|
|
137
|
+
case <-ctx.Done():
|
|
138
|
+
sub.Unsubscribe()
|
|
139
|
+
return
|
|
140
|
+
case ev := <-logs:
|
|
141
|
+
go func(ev gethtypes.Log){
|
|
142
|
+
// raw debug
|
|
143
|
+
log.Printf("[RAW] topics=%v data=%x", ev.Topics, ev.Data)
|
|
144
|
+
// parse tokens: topics[1]=token0 topics[2]=token1, pair in data[0:32]
|
|
145
|
+
if len(ev.Topics) < 3 || len(ev.Data) < 32 {
|
|
146
|
+
log.Println("unexpected PairCreated log shape")
|
|
147
|
+
return
|
|
148
|
+
}
|
|
149
|
+
t0 := common.BytesToAddress(ev.Topics[1].Bytes())
|
|
150
|
+
t1 := common.BytesToAddress(ev.Topics[2].Bytes())
|
|
151
|
+
pair := common.BytesToAddress(ev.Data[:32])
|
|
152
|
+
// determine token (non-WBNB)
|
|
153
|
+
var token common.Address
|
|
154
|
+
if strings.EqualFold(t0.Hex(), WBNB.Hex()) { token = t1 } else if strings.EqualFold(t1.Hex(), WBNB.Hex()) { token = t0 } else {
|
|
155
|
+
if cfg.OnlyWbnb {
|
|
156
|
+
log.Println("pair not WBNB pair, skip")
|
|
157
|
+
return
|
|
158
|
+
}
|
|
159
|
+
token = t0 // fallback
|
|
160
|
+
}
|
|
161
|
+
log.Printf("[PAIR] token=%s pair=%s tx=%s", token.Hex(), pair.Hex(), ev.TxHash.Hex())
|
|
162
|
+
|
|
163
|
+
// quick check: avoid double processing
|
|
164
|
+
if _, ok := soldMap.Load(token.Hex()); ok {
|
|
165
|
+
log.Println("already processed token", token.Hex())
|
|
166
|
+
return
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Here you would implement: buy -> approve -> start dev monitor (dev from tx)
|
|
170
|
+
// For safety, we only log if DRY_RUN. In production, you would construct txs, sign and broadcast.
|
|
171
|
+
if cfg.DryRun {
|
|
172
|
+
log.Println("[DRY_RUN] would buy token", token.Hex())
|
|
173
|
+
} else {
|
|
174
|
+
// In a real run: build buy tx, send via broadcasters, then approveSelf, etc.
|
|
175
|
+
log.Println("[ACTION] (stub) buy -> approve -> monitor dev")
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// mark processed to avoid repeats
|
|
179
|
+
soldMap.Store(token.Hex(), true)
|
|
180
|
+
}(ev)
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: four-meme-docs
|
|
3
|
+
description: Four.meme 平台开发文档和用法示例。包含 CLI 命令参考、API 文档、合约 ABI、代币创建/交易脚本示例。仅用于查询参考,不执行任何操作。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Four.meme 开发文档
|
|
7
|
+
|
|
8
|
+
**用途**:后期开发时查询 CLI 用法、API 接口、合约方法。**不执行任何交易操作**。
|
|
9
|
+
|
|
10
|
+
## 文档索引
|
|
11
|
+
|
|
12
|
+
| 文档 | 说明 |
|
|
13
|
+
|------|------|
|
|
14
|
+
| `create-token-scripts.md` | 创建代币脚本示例 |
|
|
15
|
+
| `execute-trade.md` | 买卖交易执行 |
|
|
16
|
+
| `tax-token-query.md` | 税务代币查询 |
|
|
17
|
+
| `token-query-api.md` | 代币 REST API |
|
|
18
|
+
| `api-create-token.md` | API 创建代币流程 |
|
|
19
|
+
| `errors.md` | 常见错误处理 |
|
|
20
|
+
| `event-listening.md` | 事件监听 |
|
|
21
|
+
| `contract-addresses.md` | 合约地址 |
|
|
22
|
+
| `agent-creator-and-wallets.md` | Agent 创建和钱包 |
|
|
23
|
+
|
|
24
|
+
## 合约地址(快速查询)
|
|
25
|
+
|
|
26
|
+
- **TryBuy**: `0xF251F83e40a78868FcfA3FA4599Dad6494E46034`
|
|
27
|
+
- **AMAP**: `0x5c952063c7fc8610FFDB798152D69F0B9550762b`
|
|
28
|
+
- **V2 Factory**: `0xca143ce32fe78f1f7019d7d551a6402fc5350c73`
|
|
29
|
+
- **V3 Factory**: `0x0BFbCF9fa4f9C56B0F40a671Ad40E0805A091865`
|
|
30
|
+
- **Chain ID**: 56 (BSC)
|
|
31
|
+
- **WBNB**: `0xBB4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c`
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Agent Creator & Agent Wallets
|
|
2
|
+
|
|
3
|
+
This document covers how to identify tokens created by an AI agent (Agent Creator) and how to identify agent wallets on-chain.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## How to Identify Token Created By Agent Creator
|
|
8
|
+
|
|
9
|
+
Tokens created by AI agents can be identified via both on-chain template bits and off-chain API fields. This flag only marks that the token creator is an **Agent wallet** and **does not imply any new special trading mode or behavior** of the token itself.
|
|
10
|
+
|
|
11
|
+
### On-chain method
|
|
12
|
+
|
|
13
|
+
Read the token's `template` from TokenManager2:
|
|
14
|
+
|
|
15
|
+
```solidity
|
|
16
|
+
template = TokenManager2._tokenInfos[tokenAddress].template;
|
|
17
|
+
bool isCreatedByAgent = (template & (1 << 85)) != 0;
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- If `isCreatedByAgent` is `true`, the token was **created by an AI agent**.
|
|
21
|
+
- If `isCreatedByAgent` is `false`, the token was **not** created by an AI agent.
|
|
22
|
+
|
|
23
|
+
### Off-chain method
|
|
24
|
+
|
|
25
|
+
Query token info via:
|
|
26
|
+
|
|
27
|
+
- `GET https://four.meme/meme-api/v1/private/token/get?address=<token address>`
|
|
28
|
+
- `GET https://four.meme/meme-api/v1/private/token/getById?id=<requestId>` (requestId from TokenCreate event)
|
|
29
|
+
|
|
30
|
+
Check the `aiCreator` field in the response `data`:
|
|
31
|
+
|
|
32
|
+
- If `aiCreator === true`, the token was **created by an AI agent**.
|
|
33
|
+
- If `aiCreator === false`, the token was **not** created by an AI agent.
|
|
34
|
+
|
|
35
|
+
**Example response:**
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"code": "0",
|
|
40
|
+
"data": {
|
|
41
|
+
"aiCreator": true,
|
|
42
|
+
...
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## How to Identify Agent Wallets
|
|
50
|
+
|
|
51
|
+
You can determine whether a wallet address is an **Agent wallet** by calling the **AgentIdentifier** contract.
|
|
52
|
+
|
|
53
|
+
### On-chain method
|
|
54
|
+
|
|
55
|
+
**Contract (BSC)**
|
|
56
|
+
|
|
57
|
+
- **Address**: `0x09B44A633de9F9EBF6FB9Bdd5b5629d3DD2cef13`
|
|
58
|
+
- **ABI**: See official Four.meme API / Protocol Integration docs (`AgentIdentifier.abi`).
|
|
59
|
+
|
|
60
|
+
**Interface**
|
|
61
|
+
|
|
62
|
+
```solidity
|
|
63
|
+
interface IAgentIdentifier {
|
|
64
|
+
function isAgent(address wallet) external view returns (bool);
|
|
65
|
+
function nftCount() external view returns (uint256);
|
|
66
|
+
function nftAt(uint256 index) external view returns (address);
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Usage**
|
|
71
|
+
|
|
72
|
+
Call `isAgent(wallet)` on the AgentIdentifier contract:
|
|
73
|
+
|
|
74
|
+
```solidity
|
|
75
|
+
IAgentIdentifier ai = IAgentIdentifier(0x09B44A633de9F9EBF6FB9Bdd5b5629d3DD2cef13);
|
|
76
|
+
bool isAgent = ai.isAgent(wallet);
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- Returns `true` if the wallet is an Agent wallet, otherwise `false`.
|
|
80
|
+
- Logic: `isAgent(wallet)` is `true` when the wallet holds any Agent NFT (`balanceOf(wallet) > 0`).
|
|
81
|
+
|
|
82
|
+
**Querying configured Agent NFTs**
|
|
83
|
+
|
|
84
|
+
- `nftCount()` — number of Agent NFT contracts registered.
|
|
85
|
+
- `nftAt(index)` — Agent NFT contract address at `index`.
|
|
86
|
+
|
|
87
|
+
Tokens created by wallets with `isAgent == true` are marked as **Agent Creator** and can be identified as **Token Created By Agent Creator** using the methods above.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Four.meme API – Create Token
|
|
2
|
+
|
|
3
|
+
Base URL: `https://four.meme/meme-api/v1`
|
|
4
|
+
|
|
5
|
+
## Endpoints (in order)
|
|
6
|
+
|
|
7
|
+
| Step | Method | Path | Description |
|
|
8
|
+
|------|--------|------|-------------|
|
|
9
|
+
| 1 | POST | `/private/user/nonce/generate` | Get nonce |
|
|
10
|
+
| 2 | POST | `/private/user/login/dex` | Login → access_token |
|
|
11
|
+
| 3 | POST | `/private/token/upload` | Upload image → imgUrl |
|
|
12
|
+
| 4 | POST | `/private/token/create` | Create → createArg, signature |
|
|
13
|
+
|
|
14
|
+
## 1. Nonce
|
|
15
|
+
|
|
16
|
+
- **URL**: `https://four.meme/meme-api/v1/private/user/nonce/generate`
|
|
17
|
+
- **Body**: `{ "accountAddress": "<wallet>", "verifyType": "LOGIN", "networkCode": "BSC" }`
|
|
18
|
+
- **Response**: `{ "code": "0", "data": "<nonce>" }`
|
|
19
|
+
|
|
20
|
+
## 2. Login
|
|
21
|
+
|
|
22
|
+
- **URL**: `https://four.meme/meme-api/v1/private/user/login/dex`
|
|
23
|
+
- **Body**: Include `verifyInfo.signature` = sign(`You are sign in Meme {nonce}`) with wallet, `verifyInfo.address`, `verifyInfo.networkCode` ("BSC"), `verifyInfo.verifyType` ("LOGIN"), plus region, langType, walletName, etc.
|
|
24
|
+
- **Response**: `{ "code": "0", "data": "<access_token>" }`
|
|
25
|
+
|
|
26
|
+
## 3. Upload image
|
|
27
|
+
|
|
28
|
+
- **URL**: `https://four.meme/meme-api/v1/private/token/upload`
|
|
29
|
+
- **Headers**: `meme-web-access: <access_token>`, `Content-Type: multipart/form-data`
|
|
30
|
+
- **Body**: `file` = image (jpeg/png/gif/bmp/webp)
|
|
31
|
+
- **Response**: `{ "code": "0", "data": "<imgUrl>" }`
|
|
32
|
+
|
|
33
|
+
## 4. Create token
|
|
34
|
+
|
|
35
|
+
- **URL**: `https://four.meme/meme-api/v1/private/token/create`
|
|
36
|
+
- **Headers**: `meme-web-access: <access_token>`, `Content-Type: application/json`
|
|
37
|
+
- **Body**: **Required**: **raisedAmount** (raise amount; use 24 or raisedToken.totalBAmount from public config), **raisedToken** (from `GET /public/config`; do not modify). Customizable: name, shortName, desc, imgUrl, launchTime, label, lpTradingFee (0.0025), webUrl, twitterUrl, telegramUrl, preSale, onlyMPC, feePlan, tokenTaxInfo (optional).
|
|
38
|
+
- **Response**: `{ "code": "0", "data": { "createArg": "...", "signature": "..." } }`
|
|
39
|
+
|
|
40
|
+
Then call **TokenManager2.createToken(createArg, sign)** on BSC with these values (as bytes).
|
|
41
|
+
|
|
42
|
+
## Labels
|
|
43
|
+
|
|
44
|
+
Meme, AI, Defi, Games, Infra, De-Sci, Social, Depin, Charity, Others.
|
|
45
|
+
|
|
46
|
+
## tokenTaxInfo (optional; Tax-type token)
|
|
47
|
+
|
|
48
|
+
Omit to create a normal token; include to create a tax-type token.
|
|
49
|
+
|
|
50
|
+
- **feeRate**: Trading fee; must be **1, 3, 5, or 10** (1%/3%/5%/10%).
|
|
51
|
+
- **burnRate**, **divideRate**, **liquidityRate**, **recipientRate**: All percentages; **sum of the four must be 100**.
|
|
52
|
+
- **recipientAddress**: Address that receives the recipient share; use `""` when not used, and **recipientRate = 0**.
|
|
53
|
+
- **minSharing**: Min balance to participate in dividends (ether units); must satisfy **minSharing = d×10ⁿ**, n≥5, 1≤d≤9, e.g. 100000, 1000000.
|
|
54
|
+
|
|
55
|
+
Full field description and examples: [token-tax-info.md](token-tax-info.md).
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Four.meme Contract Addresses (BSC only)
|
|
2
|
+
|
|
3
|
+
This skill supports **BSC only** (chainId 56). Arbitrum and Base are not supported.
|
|
4
|
+
|
|
5
|
+
## TokenManager (V1)
|
|
6
|
+
|
|
7
|
+
Used for tokens created **before** September 5, 2024. Only trading (no create).
|
|
8
|
+
|
|
9
|
+
| Chain | Address |
|
|
10
|
+
|-------|---------|
|
|
11
|
+
| BSC | `0xEC4549caDcE5DA21Df6E6422d448034B5233bFbC` |
|
|
12
|
+
|
|
13
|
+
## TokenManager2 (V2)
|
|
14
|
+
|
|
15
|
+
Used for tokens created **after** September 5, 2024. Create and trade.
|
|
16
|
+
|
|
17
|
+
| Chain | Address |
|
|
18
|
+
|-------|---------|
|
|
19
|
+
| BSC | `0x5c952063c7fc8610FFDB798152D69F0B9550762b` |
|
|
20
|
+
|
|
21
|
+
## TokenManagerHelper3 (V3)
|
|
22
|
+
|
|
23
|
+
Use for **getTokenInfo**, **tryBuy**, **trySell**. Supports both V1 and V2 tokens.
|
|
24
|
+
|
|
25
|
+
| Chain | Address |
|
|
26
|
+
|-------|---------|
|
|
27
|
+
| BSC | `0xF251F83e40a78868FcfA3FA4599Dad6494E46034` |
|
|
28
|
+
|
|
29
|
+
## AgentIdentifier (BSC)
|
|
30
|
+
|
|
31
|
+
Used to check if a wallet is an **Agent wallet** (holds an Agent NFT). See [agent-creator-and-wallets.md](agent-creator-and-wallets.md).
|
|
32
|
+
|
|
33
|
+
| Chain | Address |
|
|
34
|
+
|-------|---------|
|
|
35
|
+
| BSC | `0x09B44A633de9F9EBF6FB9Bdd5b5629d3DD2cef13` |
|
|
36
|
+
|
|
37
|
+
- **Interface**: `isAgent(address wallet)`, `nftCount()`, `nftAt(uint256 index)`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Usage
|
|
42
|
+
|
|
43
|
+
1. Call **TokenManagerHelper3.getTokenInfo(token)** to get `version` and `tokenManager`.
|
|
44
|
+
2. If `version === 1` → use TokenManager V1 for buy/sell.
|
|
45
|
+
3. If `version === 2` → use TokenManager2 for buy/sell (and check X Mode / TaxToken / AntiSniperFeeMode if needed).
|
|
46
|
+
4. Token creation is only via **TokenManager2** on BSC after obtaining `createArg` and `signature` from the four.meme API.
|
|
47
|
+
5. **Agent Creator**: Token created by agent wallet — on-chain `(template & (1 << 85)) != 0`; off-chain API `data.aiCreator === true`. Agent wallets: call **AgentIdentifier.isAgent(wallet)** on BSC.
|