From d5b04a673ce783f8dcd7570c33d580a656a82dfc Mon Sep 17 00:00:00 2001 From: Guillermo Rodriguez Date: Sun, 4 Jun 2023 14:06:41 -0300 Subject: [PATCH] Update smart contract --- skynet/dgpu.py | 20 ++--- skynet/frontend/telegram/__init__.py | 3 +- skynet/nodeos.py | 2 +- tests/contracts/telos.gpu/telos.gpu.abi | 98 ++++++++++++++++++++--- tests/contracts/telos.gpu/telos.gpu.wasm | Bin 44297 -> 46064 bytes 5 files changed, 98 insertions(+), 25 deletions(-) diff --git a/skynet/dgpu.py b/skynet/dgpu.py index 763fdd1..209dbc3 100644 --- a/skynet/dgpu.py +++ b/skynet/dgpu.py @@ -174,7 +174,10 @@ async def open_dgpu_node( lower_bound=int(time.time()) - 3600 ) - except asks.errors.RequestTimeout: + except ( + asks.errors.RequestTimeout, + json.JSONDecodeError + ): return [] async def get_status_by_request_id(request_id: int): @@ -201,16 +204,6 @@ async def open_dgpu_node( else: return None - async def get_user_nonce(user: str): - logging.info('get_user_nonce') - return (await cleos.aget_table( - 'telos.gpu', 'telos.gpu', 'users', - index_position=1, - key_type='name', - lower_bound=user, - upper_bound=user - ))[0]['nonce'] - async def begin_work(request_id: int): logging.info('begin_work') return await cleos.a_push_action( @@ -218,7 +211,8 @@ async def open_dgpu_node( 'workbegin', { 'worker': Name(account), - 'request_id': request_id + 'request_id': request_id, + 'max_workers': 2 }, account, key, permission=permission @@ -328,7 +322,7 @@ async def open_dgpu_node( if rid not in my_results: statuses = await get_status_by_request_id(rid) - if len(statuses) < config['verification_amount']: + if len(statuses) < req['min_verification']: # parse request body = json.loads(req['body']) diff --git a/skynet/frontend/telegram/__init__.py b/skynet/frontend/telegram/__init__.py index ecd66fd..f417842 100644 --- a/skynet/frontend/telegram/__init__.py +++ b/skynet/frontend/telegram/__init__.py @@ -148,7 +148,8 @@ class SkynetTelegramFrontend: 'user': Name(self.account), 'request_body': body, 'binary_data': binary_data, - 'reward': asset_from_str(reward) + 'reward': asset_from_str(reward), + 'min_verification': 1 }, self.account, self.key, permission=self.permission ) diff --git a/skynet/nodeos.py b/skynet/nodeos.py index b853208..dddc935 100644 --- a/skynet/nodeos.py +++ b/skynet/nodeos.py @@ -145,7 +145,7 @@ def open_nodeos(cleanup: bool = True): ec, out = cleos.push_action( 'telos.gpu', 'config', - [1, 'eosio.token', '4,GPU'], + ['eosio.token', '4,GPU'], f'telos.gpu@active' ) assert ec == 0 diff --git a/tests/contracts/telos.gpu/telos.gpu.abi b/tests/contracts/telos.gpu/telos.gpu.abi index 406c268..f3708bf 100644 --- a/tests/contracts/telos.gpu/telos.gpu.abi +++ b/tests/contracts/telos.gpu/telos.gpu.abi @@ -21,6 +21,40 @@ } ] }, + { + "name": "card", + "base": "", + "fields": [ + { + "name": "id", + "type": "uint64" + }, + { + "name": "owner", + "type": "name" + }, + { + "name": "card_name", + "type": "string" + }, + { + "name": "version", + "type": "string" + }, + { + "name": "total_memory", + "type": "uint64" + }, + { + "name": "mp_count", + "type": "uint32" + }, + { + "name": "extra", + "type": "string" + } + ] + }, { "name": "clean", "base": "", @@ -30,10 +64,6 @@ "name": "config", "base": "", "fields": [ - { - "name": "verification_amount", - "type": "uint8" - }, { "name": "token_contract", "type": "name" @@ -72,11 +102,15 @@ }, { "name": "binary_data", - "type": "bytes" + "type": "string" }, { "name": "reward", "type": "asset" + }, + { + "name": "min_verification", + "type": "uint32" } ] }, @@ -84,10 +118,6 @@ "name": "global_configuration_struct", "base": "", "fields": [ - { - "name": "verification_amount", - "type": "uint8" - }, { "name": "token_contract", "type": "name" @@ -154,13 +184,21 @@ "name": "reward", "type": "asset" }, + { + "name": "min_verification", + "type": "uint32" + }, + { + "name": "nonce", + "type": "uint64" + }, { "name": "body", "type": "string" }, { "name": "binary_data", - "type": "bytes" + "type": "string" }, { "name": "timestamp", @@ -213,6 +251,10 @@ { "name": "request_id", "type": "uint64" + }, + { + "name": "max_workers", + "type": "uint32" } ] }, @@ -234,6 +276,28 @@ } ] }, + { + "name": "worker", + "base": "", + "fields": [ + { + "name": "account", + "type": "name" + }, + { + "name": "joined", + "type": "time_point_sec" + }, + { + "name": "left", + "type": "time_point_sec" + }, + { + "name": "url", + "type": "string" + } + ] + }, { "name": "worker_status_struct", "base": "", @@ -296,6 +360,13 @@ } ], "tables": [ + { + "name": "cards", + "type": "card", + "index_type": "i64", + "key_names": [], + "key_types": [] + }, { "name": "config", "type": "global_configuration_struct", @@ -330,6 +401,13 @@ "index_type": "i64", "key_names": [], "key_types": [] + }, + { + "name": "workers", + "type": "worker", + "index_type": "i64", + "key_names": [], + "key_types": [] } ], "ricardian_clauses": [], diff --git a/tests/contracts/telos.gpu/telos.gpu.wasm b/tests/contracts/telos.gpu/telos.gpu.wasm index 18dc265b2fdcba8074df182b4c7190f7a0936659..688185263477a3e2acbe25ab4f9eed5839ca1eaa 100755 GIT binary patch literal 46064 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 A;Q#;t literal 44297 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ΝWA?KgS$BT`o1XgvG*T9wq6;|c$n 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 HSeX9@n1wEE