Skip to content

Commit 4104400

Browse files
authored
feat: support new detection API (#34)
1 parent 953fa73 commit 4104400

File tree

5 files changed

+174
-1
lines changed

5 files changed

+174
-1
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ repos:
2121
- id: trailing-whitespace
2222
exclude: ^swagger_client/
2323
- repo: https://github.com/PyCQA/flake8
24-
rev: 3.9.2
24+
rev: 7.2.0
2525
hooks:
2626
- id: flake8
2727
exclude: '^swagger_client/'

goplus/locker.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Copyright 2023 The GoPlus. All rights reserved.
2+
# Licensed under the Apache License, Version 2.0 (the "License");
3+
# you may not use this file except in compliance with the License.
4+
# You may obtain a copy of the License at
5+
#
6+
# http://www.apache.org/licenses/LICENSE-2.0
7+
#
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
14+
from goplus.base import Base
15+
from swagger_client.api.lock_controller_api import LockControllerApi
16+
17+
18+
class Locker(Base):
19+
def __init__(self, access_token=None):
20+
super().__init__(access_token=access_token)
21+
self.api = LockControllerApi()
22+
23+
def locker_token(
24+
self, chain_id: str, token_address: str, page_num: int, page_size: int, **kwargs
25+
):
26+
return self.api.get_token_lockers_using_get(
27+
chain_id=chain_id,
28+
token_address=token_address,
29+
page_num=page_num,
30+
page_size=page_size,
31+
**self.authorization,
32+
**kwargs
33+
)
34+
35+
def locker_lp_v3(
36+
self, chain_id: str, pool_address: str, page_num: int, page_size: int, **kwargs
37+
):
38+
return self.api.get_nft_lockers_using_get(
39+
chain_id=chain_id,
40+
pool_address=pool_address,
41+
page_num=page_num,
42+
page_size=page_size,
43+
**self.authorization,
44+
**kwargs
45+
)

goplus/token.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313

1414
from goplus.base import Base
1515
from swagger_client.api.token_controller_v_1_api import TokenControllerV1Api
16+
from swagger_client.api.token_security_api_for_solana__beta_api import (
17+
TokenSecurityAPIForSolanaBetaApi,
18+
)
19+
from swagger_client.api.token_security_api_for_sui_api import TokenSecurityAPIForSuiApi
1620

1721

1822
class Token(Base):
@@ -23,6 +27,8 @@ class Token(Base):
2327
def __init__(self, access_token=None):
2428
super().__init__(access_token=access_token)
2529
self.api = TokenControllerV1Api()
30+
self.solana_api = TokenSecurityAPIForSolanaBetaApi()
31+
self.sui_api = TokenSecurityAPIForSuiApi()
2632

2733
@staticmethod
2834
def __check(addresses):
@@ -43,3 +49,19 @@ def token_security(self, chain_id: str, addresses: list, **kwargs):
4349
**self.authorization,
4450
**kwargs
4551
)
52+
53+
def solana_token_security(self, addresses: list, **kwargs):
54+
55+
self.__check(addresses)
56+
57+
return self.solana_api.solana_token_security_using_get(
58+
contract_addresses=",".join(addresses), **self.authorization, **kwargs
59+
)
60+
61+
def sui_token_security(self, addresses: list, **kwargs):
62+
63+
self.__check(addresses)
64+
65+
return self.sui_api.sui_token_security_using_get(
66+
contract_addresses=",".join(addresses), **self.authorization, **kwargs
67+
)

goplus/tx_simulation.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# Copyright 2023 The GoPlus. All rights reserved.
2+
# Licensed under the Apache License, Version 2.0 (the "License");
3+
# you may not use this file except in compliance with the License.
4+
# You may obtain a copy of the License at
5+
#
6+
# http://www.apache.org/licenses/LICENSE-2.0
7+
#
8+
# Unless required by applicable law or agreed to in writing, software
9+
# distributed under the License is distributed on an "AS IS" BASIS,
10+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
# See the License for the specific language governing permissions and
12+
# limitations under the License.
13+
14+
from goplus.base import Base
15+
from swagger_client.api.transaction_simulation_for_solana_api import (
16+
TransactionSimulationForSolanaApi,
17+
)
18+
19+
20+
class TxSimulation(Base):
21+
def __init__(self, access_token=None):
22+
super().__init__(access_token=access_token)
23+
self.api = TransactionSimulationForSolanaApi()
24+
25+
def solana_tx_simulation(self, encoded_transaction: str, **kwargs):
26+
27+
body = {"encoded_transaction": encoded_transaction}
28+
return self.api.prerun_tx_using_post(body=body, **self.authorization, **kwargs)

test_goplus.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,40 @@
1818
from goplus.dapp import Dapp
1919
from goplus.decode import Decode
2020
from goplus.errorcode import Code
21+
from goplus.locker import Locker
2122
from goplus.nft import Nft
2223
from goplus.phishing_site import PushingSite
2324
from goplus.rug_pull import RugPull
2425
from goplus.token import Token
26+
from goplus.tx_simulation import TxSimulation
2527

2628

2729
class TokenTest(unittest.TestCase):
2830
def test_token_security(self):
31+
# token
2932
res = Token().token_security(
3033
chain_id="1", addresses=["0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"]
3134
)
3235
self.assertEqual(res.code, Code.SUCCESS, res.message)
3336

37+
def test_solana_token_security(self):
38+
39+
# solana
40+
res = Token().solana_token_security(
41+
addresses=["HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3"]
42+
)
43+
self.assertEqual(res.code, Code.SUCCESS, res.message)
44+
45+
def test_sui_token_security(self):
46+
47+
# sui
48+
res = Token().sui_token_security(
49+
addresses=[
50+
"0x40402a987c2f8a71b755561bfbd16c2cbb991e27e609ad148809491c32bacab9::kui::KUI"
51+
]
52+
)
53+
self.assertEqual(res.code, Code.SUCCESS, res.message)
54+
3455

3556
class AddressTest(unittest.TestCase):
3657
def test_address_security(self):
@@ -105,5 +126,62 @@ def test_rug_pull_security(self):
105126
self.assertEqual(res.code, Code.SUCCESS, res.message)
106127

107128

129+
class LockerTest(unittest.TestCase):
130+
def test_locker_token(self):
131+
res = Locker().locker_token(
132+
chain_id="8453",
133+
page_num=1,
134+
page_size=100,
135+
token_address="0x6fd0303649296360f10c07b24521deda9223086d",
136+
)
137+
self.assertEqual(res.code, Code.SUCCESS, res.message)
138+
139+
def test_locker_lp_v3(self):
140+
res = Locker().locker_lp_v3(
141+
chain_id="56",
142+
page_num=1,
143+
page_size=100,
144+
pool_address="0x579df956c6cE6178fBBD78bbE4f05786cFBA9B76",
145+
)
146+
self.assertEqual(res.code, Code.SUCCESS, res.message)
147+
148+
149+
class TxSimulationTest(unittest.TestCase):
150+
def test_solana_tx_simulation(self):
151+
res = TxSimulation().solana_tx_simulation(
152+
encoded_transaction="AT+Td4vATQ8bPgyQPt25Hp6Ve2jECOkwS3+PC5Z8HhLK"
153+
"/7mDbnQ8tW3sKzQnNeVWxsJzo8knzMhQZbnL+FpzVgOAAQADGuG"
154+
"EgGi3qMErQECfFXEVxCXlALMU02fKK0Yf27WbmN3in"
155+
"0h2yAJOqRM87lkKfGtIJh/K1ZeTCGy7baAOhr7lAHEGm4hX/quBhPt"
156+
"of2NGGMA12sQ53BrrO1WYoPAAAAAAAUHVl1rR1ll4q"
157+
"3QLbxXmVinsWpdivaeQV/mhOzBJCk8REfu0KcAzb3YRg2Ma9lf/One"
158+
"Tw5veLElNTzFqNrsDkuYLvA+xH7fegRONkq/Pv7gl"
159+
"UQsHQHoREAxHUw9pcWEqf8JzpBDzmh14iMUco6VGUnJ5JdUmYvy9vVSA"
160+
"7Oxsk9U/04YFfm4JbWwLmfCCrhw+JkLOorQ/LWaR1"
161+
"K9ts6sVhyf7Py+Jb8E9fs7m+Yp0tE0aoYujFI/3KfPd+ElqLb+wi+bW5R"
162+
"6OHe4FtxpdJLGwx6Vpl5tqHI0b/JFzDt2fRX4DOIT6Ynj"
163+
"6mq18q+cWm0lZkVpKNXSV+WHJK0O+B/b/M7kKPU71EHDfVbbANy9N/"
164+
"TBkLtvrgPawBy0NzW5ehEMJ/ciXSyf8WLm80PBN0XBjIIT"
165+
"O5GQy+w8X4b7lC5ENdeNBQtxtFaOMHuCIMKYErfMjPnIdcZyqF/E2"
166+
"3LNm67pyWhP4BpxgdtdoBCYrCN+usbbjQi3UwAXrm0zVY6"
167+
"Y/BpSVhMb6evO+2606PWXzaqvJdDGxu+TC0vbg5HymAgNFL11hjqY"
168+
"6esn2GopdBm3ZyMw1bOMZM/i2kbQAXFV+SN+vT8Fyjbr97"
169+
"ysVNCK0N0ppW+uvhHyoakZ54IPbNYs9uSpZxVAe6q5A+cCehtHSM5H"
170+
"1lGMuCl2Xy9kJpwfYFYHGYz5CEdnDZKSvMTjkXNIUKlSi"
171+
"Fy/yY6fNErKOUn/kfnyrpIcseSoueZv3kcqOWpwwC/t0MMF1LNOwyHxIN"
172+
"LlxBSA55tlrnVisLQ4iM8cK+92bmKEIM7Kye02Vb0y/Q"
173+
"Ki7zQUdfHu14hsh7jlG5aOhjOg75OXUg1wpZ5pceJoVtb4l9BcMwoDLa+MZ"
174+
"LFA4OAHPRDAYD54/hmMiOsgBBpcQ2/fVBwVKU1qZKSEGT"
175+
"STocWDaOHx8NbXdvJK7geQfqEBBBUSNAwZGb+UhFzL/7K26csOb57yM5bv"
176+
"F9xJrLEObOkAAAAB/EQusFKXzoXRK459NkGDBTgIsPmYN/3"
177+
"ocys69vB4asgUXBgABAhobHAkFoIYBAAAAAAAXIhodGxwAAQMeBAIFBg"
178+
"cICQoYCwwNDh4DBQ8GEBESExgUFRYxAKCGAQAAAAAAjDwA"
179+
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcGAAEAGh"
180+
"scAQYZAAkDmvYAAAAAAAAZAAUCDCsFAAEZjx9MOkUiY9QTs"
181+
"s0X68vBoOWIc2TmJhoSqBeS6hZaPgAFAgcAAxA="
182+
)
183+
self.assertEqual(res.code, Code.SUCCESS, res.message)
184+
185+
108186
if __name__ == "__main__":
109187
unittest.main()

0 commit comments

Comments
 (0)