From 8e3ce2dedffcc8f7f0f2e6f4da43511160bcfbc8 Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sun, 15 May 2022 00:53:39 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/helpers.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/wallet/helpers.py b/wallet/helpers.py index f9f0390..8eb6e6d 100644 --- a/wallet/helpers.py +++ b/wallet/helpers.py @@ -38,7 +38,6 @@ def generate_address(user, chain_symbol,index:int=None, type=None, new_address=T chain=chain, public_key= hdwallet.xpublic_key(), ) - # user = pubkey.user # 确认最新的地址下标 if index is None: @@ -50,7 +49,6 @@ def generate_address(user, chain_symbol,index:int=None, type=None, new_address=T if new_address: index = index + 1 except Address.DoesNotExist as e: - # index=0 pass # 若已经存在该地址则返回,没有则创建 @@ -72,4 +70,4 @@ def generate_address(user, chain_symbol,index:int=None, type=None, new_address=T address=address ) except Exception as e: - logger.error(f"wallet.generate_address:{e.args}") + logger.error(msg="Exception while generating wallet address:", exc_info=e) From 44e3c38c9ee06bdbbcf52e1326bfb05376c3afac Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Fri, 20 May 2022 23:36:34 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BF=AB=E6=8D=B7?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start.bat | 1 + 1 file changed, 1 insertion(+) create mode 100644 start.bat diff --git a/start.bat b/start.bat new file mode 100644 index 0000000..f459841 --- /dev/null +++ b/start.bat @@ -0,0 +1 @@ +python manage.py runserver \ No newline at end of file From bfde38ba3d49bef72de2e43892e58fbee05ce69d Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 00:03:54 +0800 Subject: [PATCH 03/13] =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=9A=84=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wallet/models.py b/wallet/models.py index d36066b..fbc109c 100644 --- a/wallet/models.py +++ b/wallet/models.py @@ -44,7 +44,7 @@ class Pubkey(CreateUpdateTracker): chain = models.ForeignKey(Chain, on_delete=models.CASCADE) def __str__(self): - return f"{self.public_key[:6]}...{self.public_key[6:]}" + return f"{self.public_key[:8]}...{self.public_key[-8:]}" class Meta: verbose_name = _('public key') From 2c2f7bc055f8803c92b47a2fb467dbc9efabf761 Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 00:47:23 +0800 Subject: [PATCH 04/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E6=8F=8F=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/management/commands/create_deposit_address.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/wallet/management/commands/create_deposit_address.py b/wallet/management/commands/create_deposit_address.py index cf5c56e..39d46ea 100644 --- a/wallet/management/commands/create_deposit_address.py +++ b/wallet/management/commands/create_deposit_address.py @@ -9,7 +9,11 @@ class Command(BaseCommand): - help = "Create Deposit Address" + help = """ + Create Deposit Address: + + python manage.py create_deposit_address -u [username or uid] + """ def add_arguments(self, parser): self.username_help = 'User Unique username (Required)' From 30d1278aa329c388785c272bfbc9217a56534d11 Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 00:47:42 +0800 Subject: [PATCH 05/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AD=90=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=BE=9D=E8=B5=96=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements_submodule.txt | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 requirements_submodule.txt diff --git a/requirements_submodule.txt b/requirements_submodule.txt new file mode 100644 index 0000000..477b76d --- /dev/null +++ b/requirements_submodule.txt @@ -0,0 +1,4 @@ +ecdsa>=0.13,<1 +mnemonic>=0.19,<1 +pysha3>=1.0.2,<2 +base58>=2.0.1,<3 \ No newline at end of file From c50ab2ac1963c6b987b4b8630f9f9f4afd98d05a Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 02:03:06 +0800 Subject: [PATCH 06/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=BC=83=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/management/commands/create_deposit_address.py | 1 - 1 file changed, 1 deletion(-) diff --git a/wallet/management/commands/create_deposit_address.py b/wallet/management/commands/create_deposit_address.py index 39d46ea..eb4f663 100644 --- a/wallet/management/commands/create_deposit_address.py +++ b/wallet/management/commands/create_deposit_address.py @@ -1,6 +1,5 @@ import os -# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lender.settings') from django.core.management.base import BaseCommand From 99d390a69bca73d383d96e50c143be09ff6ab9f6 Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 09:38:55 +0800 Subject: [PATCH 07/13] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/management/commands/create_deposit_address.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/wallet/management/commands/create_deposit_address.py b/wallet/management/commands/create_deposit_address.py index eb4f663..74315be 100644 --- a/wallet/management/commands/create_deposit_address.py +++ b/wallet/management/commands/create_deposit_address.py @@ -1,6 +1,3 @@ - -import os - from django.core.management.base import BaseCommand from logging import getLogger From a706903b5efa81d01d4507c63cc92a791eecd164 Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 11:16:59 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E5=A2=9E=E5=8A=A0chainstate=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet.json | 14 ++++++ wallet/admin.py | 10 ++++ wallet/constant.py | 6 +++ wallet/management/commands/runchainstate.py | 23 ++++++++++ wallet/migrations/0003_rpc_state.py | 51 +++++++++++++++++++++ wallet/migrations/0004_alter_rpc_auth.py | 18 ++++++++ wallet/models.py | 23 ++++++++++ 7 files changed, 145 insertions(+) create mode 100644 wallet/management/commands/runchainstate.py create mode 100644 wallet/migrations/0003_rpc_state.py create mode 100644 wallet/migrations/0004_alter_rpc_auth.py diff --git a/wallet.json b/wallet.json index fd3ec15..6e2b8d3 100644 --- a/wallet.json +++ b/wallet.json @@ -21,6 +21,20 @@ "explorer_url":"https://etherscan.io/" } }, + { + "model":"wallet.rpc", + "fields":{ + "created_at":"2022-05-21T03:11:20.347Z", + "updated_at":"2022-05-21T03:11:20.347Z", + "chain":2, + "company":"infura", + "alias":"test", + "endpoint":"https://mainnet.infura.io/v3/8a5284b35807498aa04f95fc580a76ec", + "username":null, + "password":null, + "auth":"NORMAL" + } + }, { "model":"wallet.token", "fields":{ diff --git a/wallet/admin.py b/wallet/admin.py index 0eee8fd..c913ae1 100644 --- a/wallet/admin.py +++ b/wallet/admin.py @@ -52,6 +52,16 @@ class AddressAdmin(admin.ModelAdmin): # def has_change_permission(self, request, *args, **kwargs): # return False +class RPCAdmin(admin.ModelAdmin): + + list_display = ("chain","company","alias","endpoint","username","password","auth",) + +class StateAdmin(admin.ModelAdmin): + + list_display = ("address","balance","next_time","is_active","rpc",) + +admin.site.register(RPC,RPCAdmin) +admin.site.register(State,StateAdmin) admin.site.register(Address,AddressAdmin) admin.site.register(Chain,ChainAdmin) admin.site.register(Token,TokenAdmin) diff --git a/wallet/constant.py b/wallet/constant.py index 9ffc3ce..01a4835 100644 --- a/wallet/constant.py +++ b/wallet/constant.py @@ -6,4 +6,10 @@ ADDRESS_TYPE = ( (DEPOSIT,_("deposit")), (SYSTEM_LEASE,_("system lease")), +) + + +NORMAL="NORMAL" +AUTH_TYPE = ( + (NORMAL, _("normal")), ) \ No newline at end of file diff --git a/wallet/management/commands/runchainstate.py b/wallet/management/commands/runchainstate.py new file mode 100644 index 0000000..12914e6 --- /dev/null +++ b/wallet/management/commands/runchainstate.py @@ -0,0 +1,23 @@ +from django.core.management.base import BaseCommand + +from logging import getLogger +logger = getLogger(__name__) + + +class Command(BaseCommand): + help = """ + Create Deposit Address: + + python manage.py create_deposit_address -u [username or uid] + """ + + def add_arguments(self, parser): + pass + + def handle(self, *args, **options): + pass + + + + + \ No newline at end of file diff --git a/wallet/migrations/0003_rpc_state.py b/wallet/migrations/0003_rpc_state.py new file mode 100644 index 0000000..2f814b5 --- /dev/null +++ b/wallet/migrations/0003_rpc_state.py @@ -0,0 +1,51 @@ +# Generated by Django 4.0.4 on 2022-05-21 02:24 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0002_alter_address_chain_alter_pubkey_chain_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='RPC', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created Time')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated Time')), + ('company', models.CharField(max_length=128, verbose_name='company')), + ('alias', models.CharField(blank=True, max_length=128, null=True, verbose_name='alias')), + ('endpoint', models.CharField(max_length=128, verbose_name='endpoint')), + ('username', models.CharField(blank=True, max_length=128, null=True, verbose_name='username')), + ('password', models.CharField(blank=True, max_length=128, null=True, verbose_name='password')), + ('auth', models.CharField(max_length=128, verbose_name='auth')), + ('chain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wallet_rpc', to='wallet.chain')), + ], + options={ + 'verbose_name': 'RPC', + 'verbose_name_plural': 'RPC', + }, + ), + migrations.CreateModel( + name='State', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created Time')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated Time')), + ('balance', models.JSONField(verbose_name='balance')), + ('next_time', models.DateTimeField(auto_now_add=True, verbose_name='Created Time')), + ('is_active', models.BooleanField(default=False, verbose_name='active')), + ('address', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wallet_state', to='wallet.address')), + ('rpc', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wallet_state', to='wallet.rpc')), + ('token', models.ManyToManyField(related_name='wallet_state', to='wallet.token')), + ], + options={ + 'ordering': ('-created_at',), + 'abstract': False, + }, + ), + ] diff --git a/wallet/migrations/0004_alter_rpc_auth.py b/wallet/migrations/0004_alter_rpc_auth.py new file mode 100644 index 0000000..b5baacb --- /dev/null +++ b/wallet/migrations/0004_alter_rpc_auth.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.4 on 2022-05-21 03:09 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0003_rpc_state'), + ] + + operations = [ + migrations.AlterField( + model_name='rpc', + name='auth', + field=models.CharField(choices=[('NORMAL', 'normal')], default='NORMAL', max_length=128, verbose_name='auth'), + ), + ] diff --git a/wallet/models.py b/wallet/models.py index fbc109c..8e0f887 100644 --- a/wallet/models.py +++ b/wallet/models.py @@ -37,6 +37,19 @@ class Meta: verbose_name = _('chain') verbose_name_plural = _('chain') +class RPC(CreateUpdateTracker): + chain = models.ForeignKey(Chain, related_name='wallet_rpc', on_delete=models.CASCADE) + company = models.CharField(verbose_name=_("company"),max_length=128) + alias = models.CharField(verbose_name=_("alias"),max_length=128,blank=True,null=True,) + endpoint = models.CharField(verbose_name=_("endpoint"),max_length=128) + username = models.CharField(verbose_name=_("username"),max_length=128,blank=True,null=True,) + password = models.CharField(verbose_name=_("password"),max_length=128,blank=True,null=True,) + auth = models.CharField(verbose_name=_("auth"),max_length=128,choices=AUTH_TYPE,default=NORMAL) + + class Meta: + verbose_name = _('RPC') + verbose_name_plural = _('RPC') + class Pubkey(CreateUpdateTracker): user = models.ForeignKey(get_user_model(),related_name='wallet_pubkey',blank=True,null=True,verbose_name=_("User ID"),on_delete=models.CASCADE) public_key = models.CharField(verbose_name=_("Account Extended Public Key"),max_length=128) @@ -115,3 +128,13 @@ def __str__(self): class Meta: verbose_name = _('address') verbose_name_plural = _('addresses') + + + +class State(CreateUpdateTracker): + address = models.ForeignKey(Address, related_name="wallet_state",on_delete=models.CASCADE) + token = models.ManyToManyField(to=Token,related_name="wallet_state") + balance = models.JSONField(verbose_name=_('balance')) + next_time = models.DateTimeField(_("Created Time"),auto_now_add=True,editable=False) + is_active = models.BooleanField(verbose_name=_('active'),default=False) + rpc = models.ForeignKey(RPC, related_name="wallet_state", on_delete=models.CASCADE) From 087961fbea7351dfd3d39659453f8b785eec19f0 Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 11:35:46 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E5=88=A0=E9=99=A4`state`=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E7=9A=84`token`=E4=BE=9D=E8=B5=96=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/admin.py | 2 +- ...s_update_alter_state_is_active_and_more.py | 28 +++++++++++++++++ wallet/migrations/0006_remove_state_token.py | 17 +++++++++++ .../migrations/0007_alter_state_next_time.py | 18 +++++++++++ wallet/models.py | 30 ++++++++++++++++--- 5 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 wallet/migrations/0005_state_is_update_alter_state_is_active_and_more.py create mode 100644 wallet/migrations/0006_remove_state_token.py create mode 100644 wallet/migrations/0007_alter_state_next_time.py diff --git a/wallet/admin.py b/wallet/admin.py index c913ae1..aa66a4c 100644 --- a/wallet/admin.py +++ b/wallet/admin.py @@ -58,7 +58,7 @@ class RPCAdmin(admin.ModelAdmin): class StateAdmin(admin.ModelAdmin): - list_display = ("address","balance","next_time","is_active","rpc",) + list_display = ("address","balance","next_time","is_active","rpc","next_time") admin.site.register(RPC,RPCAdmin) admin.site.register(State,StateAdmin) diff --git a/wallet/migrations/0005_state_is_update_alter_state_is_active_and_more.py b/wallet/migrations/0005_state_is_update_alter_state_is_active_and_more.py new file mode 100644 index 0000000..4819fde --- /dev/null +++ b/wallet/migrations/0005_state_is_update_alter_state_is_active_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.0.4 on 2022-05-21 03:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0004_alter_rpc_auth'), + ] + + operations = [ + migrations.AddField( + model_name='state', + name='is_update', + field=models.BooleanField(default=False, help_text='Status of address update', verbose_name='update'), + ), + migrations.AlterField( + model_name='state', + name='is_active', + field=models.BooleanField(default=True, help_text='Whether it is necessary to detect the operating status of the address', verbose_name='active'), + ), + migrations.AlterField( + model_name='state', + name='next_time', + field=models.DateTimeField(editable=False, help_text='When to run the next test', verbose_name='Created Time'), + ), + ] diff --git a/wallet/migrations/0006_remove_state_token.py b/wallet/migrations/0006_remove_state_token.py new file mode 100644 index 0000000..219f9bf --- /dev/null +++ b/wallet/migrations/0006_remove_state_token.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.4 on 2022-05-21 03:28 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0005_state_is_update_alter_state_is_active_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='state', + name='token', + ), + ] diff --git a/wallet/migrations/0007_alter_state_next_time.py b/wallet/migrations/0007_alter_state_next_time.py new file mode 100644 index 0000000..b4df0eb --- /dev/null +++ b/wallet/migrations/0007_alter_state_next_time.py @@ -0,0 +1,18 @@ +# Generated by Django 4.0.4 on 2022-05-21 03:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0006_remove_state_token'), + ] + + operations = [ + migrations.AlterField( + model_name='state', + name='next_time', + field=models.DateTimeField(auto_now=True, help_text='When to run the next test', verbose_name='Created Time'), + ), + ] diff --git a/wallet/models.py b/wallet/models.py index 8e0f887..7cd5d0a 100644 --- a/wallet/models.py +++ b/wallet/models.py @@ -46,6 +46,9 @@ class RPC(CreateUpdateTracker): password = models.CharField(verbose_name=_("password"),max_length=128,blank=True,null=True,) auth = models.CharField(verbose_name=_("auth"),max_length=128,choices=AUTH_TYPE,default=NORMAL) + def __str__(self): + return f"{self.alias}-[{self.company}]" + class Meta: verbose_name = _('RPC') verbose_name_plural = _('RPC') @@ -85,7 +88,7 @@ class Token(CreateUpdateTracker): ) def __str__(self) -> str: - return f"{self.token_symbol}" + return f"{self.token_name}" class Meta: verbose_name = _('Token') @@ -133,8 +136,27 @@ class Meta: class State(CreateUpdateTracker): address = models.ForeignKey(Address, related_name="wallet_state",on_delete=models.CASCADE) - token = models.ManyToManyField(to=Token,related_name="wallet_state") balance = models.JSONField(verbose_name=_('balance')) - next_time = models.DateTimeField(_("Created Time"),auto_now_add=True,editable=False) - is_active = models.BooleanField(verbose_name=_('active'),default=False) + next_time = models.DateTimeField( + _("Created Time"),editable=False, + auto_now=True, + help_text=_( + "When to run the next test" + ) + ) + is_active = models.BooleanField( + verbose_name=_('active'),default=True, + help_text=_( + "Whether it is necessary to detect the operating status of the address" + ) + ) + is_update = models.BooleanField( + verbose_name=_('update'),default=False, + help_text=_( + "Status of address update" + ) + ) rpc = models.ForeignKey(RPC, related_name="wallet_state", on_delete=models.CASCADE) + + def __str__(self): + return f"{self.is_update}" \ No newline at end of file From cac52d80f5ca80174ebaad7ae7bcc1d1cd0220ff Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 11:45:30 +0800 Subject: [PATCH 10/13] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + requirements.txt | 5 ++--- requirements_submodule.txt | 4 ---- 3 files changed, 3 insertions(+), 7 deletions(-) delete mode 100644 requirements_submodule.txt diff --git a/README.md b/README.md index 24d263a..aec8cce 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ Django 区块链钱包应用 # 应用 ``` +pip install Django>=4.0.4,<5 # 构建本地数据库 python manage.py migrate # 创建超级用户 diff --git a/requirements.txt b/requirements.txt index 24a2b1f..5aa7ed6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,5 @@ -Django>=4.0.4,<5 - ecdsa>=0.13,<1 mnemonic>=0.19,<1 pysha3>=1.0.2,<2 -base58>=2.0.1,<3 \ No newline at end of file +base58>=2.0.1,<3 +requests>=2.27.1,<3 \ No newline at end of file diff --git a/requirements_submodule.txt b/requirements_submodule.txt deleted file mode 100644 index 477b76d..0000000 --- a/requirements_submodule.txt +++ /dev/null @@ -1,4 +0,0 @@ -ecdsa>=0.13,<1 -mnemonic>=0.19,<1 -pysha3>=1.0.2,<2 -base58>=2.0.1,<3 \ No newline at end of file From cf38d22cb1d7b230980c5c11cb6ec6434e1dcb40 Mon Sep 17 00:00:00 2001 From: nickname <410058486@qq.com> Date: Sat, 21 May 2022 14:44:17 +0800 Subject: [PATCH 11/13] nothing --- wallet/models.py | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/wallet/models.py b/wallet/models.py index 7cd5d0a..f50c17f 100644 --- a/wallet/models.py +++ b/wallet/models.py @@ -37,21 +37,6 @@ class Meta: verbose_name = _('chain') verbose_name_plural = _('chain') -class RPC(CreateUpdateTracker): - chain = models.ForeignKey(Chain, related_name='wallet_rpc', on_delete=models.CASCADE) - company = models.CharField(verbose_name=_("company"),max_length=128) - alias = models.CharField(verbose_name=_("alias"),max_length=128,blank=True,null=True,) - endpoint = models.CharField(verbose_name=_("endpoint"),max_length=128) - username = models.CharField(verbose_name=_("username"),max_length=128,blank=True,null=True,) - password = models.CharField(verbose_name=_("password"),max_length=128,blank=True,null=True,) - auth = models.CharField(verbose_name=_("auth"),max_length=128,choices=AUTH_TYPE,default=NORMAL) - - def __str__(self): - return f"{self.alias}-[{self.company}]" - - class Meta: - verbose_name = _('RPC') - verbose_name_plural = _('RPC') class Pubkey(CreateUpdateTracker): user = models.ForeignKey(get_user_model(),related_name='wallet_pubkey',blank=True,null=True,verbose_name=_("User ID"),on_delete=models.CASCADE) @@ -134,7 +119,30 @@ class Meta: +class RPC(CreateUpdateTracker): + chain = models.ForeignKey(Chain, related_name='wallet_rpc', on_delete=models.CASCADE) + company = models.CharField(verbose_name=_("company"),max_length=128) + alias = models.CharField(verbose_name=_("alias"),max_length=128,blank=True,null=True,) + endpoint = models.CharField(verbose_name=_("endpoint"),max_length=128) + username = models.CharField(verbose_name=_("username"),max_length=128,blank=True,null=True,) + password = models.CharField(verbose_name=_("password"),max_length=128,blank=True,null=True,) + auth = models.CharField(verbose_name=_("auth"),max_length=128,choices=AUTH_TYPE,default=NORMAL) + + def __str__(self): + return f"{self.alias}-[{self.company}]" + + class Meta: + verbose_name = _('RPC') + verbose_name_plural = _('RPC') + + +class StateManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(is_active=True) + class State(CreateUpdateTracker): + objects = StateManager() + address = models.ForeignKey(Address, related_name="wallet_state",on_delete=models.CASCADE) balance = models.JSONField(verbose_name=_('balance')) next_time = models.DateTimeField( @@ -159,4 +167,8 @@ class State(CreateUpdateTracker): rpc = models.ForeignKey(RPC, related_name="wallet_state", on_delete=models.CASCADE) def __str__(self): - return f"{self.is_update}" \ No newline at end of file + return f"{self.is_update}" + + class Meta: + verbose_name = _('State') + verbose_name_plural = _('Status') From 6432f2dabe921d50fb80a00847504a8b94111c60 Mon Sep 17 00:00:00 2001 From: louie <727057301@qq.com> Date: Sat, 21 May 2022 20:15:52 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E6=96=B0=E5=A2=9E`chainstate`=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/chainstate/__init__.py | 0 wallet/chainstate/admin.py | 3 +++ wallet/chainstate/apps.py | 6 ++++++ wallet/chainstate/migrations/__init__.py | 0 wallet/chainstate/models.py | 3 +++ wallet/chainstate/tests.py | 3 +++ wallet/chainstate/views.py | 3 +++ 7 files changed, 18 insertions(+) create mode 100644 wallet/chainstate/__init__.py create mode 100644 wallet/chainstate/admin.py create mode 100644 wallet/chainstate/apps.py create mode 100644 wallet/chainstate/migrations/__init__.py create mode 100644 wallet/chainstate/models.py create mode 100644 wallet/chainstate/tests.py create mode 100644 wallet/chainstate/views.py diff --git a/wallet/chainstate/__init__.py b/wallet/chainstate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wallet/chainstate/admin.py b/wallet/chainstate/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/wallet/chainstate/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/wallet/chainstate/apps.py b/wallet/chainstate/apps.py new file mode 100644 index 0000000..31afe02 --- /dev/null +++ b/wallet/chainstate/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ChainstateConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'chainstate' diff --git a/wallet/chainstate/migrations/__init__.py b/wallet/chainstate/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wallet/chainstate/models.py b/wallet/chainstate/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/wallet/chainstate/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/wallet/chainstate/tests.py b/wallet/chainstate/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/wallet/chainstate/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/wallet/chainstate/views.py b/wallet/chainstate/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/wallet/chainstate/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. From 3e764054e3f47ad96117c794e62806fc5e0efcc3 Mon Sep 17 00:00:00 2001 From: louie <727057301@qq.com> Date: Sat, 21 May 2022 20:28:20 +0800 Subject: [PATCH 13/13] =?UTF-8?q?=E7=8B=AC=E7=AB=8B=20chainstate=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wallet/admin.py | 10 ---- wallet/chainstate/admin.py | 12 ++++ wallet/chainstate/apps.py | 2 +- wallet/chainstate/constant.py | 7 +++ wallet/chainstate/migrations/0001_initial.py | 53 +++++++++++++++++ wallet/chainstate/models.py | 57 +++++++++++++++++++ wallet/constant.py | 5 -- wallet/migrations/0008_alter_state_options.py | 17 ++++++ ...ss_remove_state_rpc_delete_rpc_and_more.py | 27 +++++++++ wallet/models.py | 54 ------------------ 10 files changed, 174 insertions(+), 70 deletions(-) create mode 100644 wallet/chainstate/constant.py create mode 100644 wallet/chainstate/migrations/0001_initial.py create mode 100644 wallet/migrations/0008_alter_state_options.py create mode 100644 wallet/migrations/0009_remove_state_address_remove_state_rpc_delete_rpc_and_more.py diff --git a/wallet/admin.py b/wallet/admin.py index aa66a4c..0eee8fd 100644 --- a/wallet/admin.py +++ b/wallet/admin.py @@ -52,16 +52,6 @@ class AddressAdmin(admin.ModelAdmin): # def has_change_permission(self, request, *args, **kwargs): # return False -class RPCAdmin(admin.ModelAdmin): - - list_display = ("chain","company","alias","endpoint","username","password","auth",) - -class StateAdmin(admin.ModelAdmin): - - list_display = ("address","balance","next_time","is_active","rpc","next_time") - -admin.site.register(RPC,RPCAdmin) -admin.site.register(State,StateAdmin) admin.site.register(Address,AddressAdmin) admin.site.register(Chain,ChainAdmin) admin.site.register(Token,TokenAdmin) diff --git a/wallet/chainstate/admin.py b/wallet/chainstate/admin.py index 8c38f3f..f1ff8c4 100644 --- a/wallet/chainstate/admin.py +++ b/wallet/chainstate/admin.py @@ -1,3 +1,15 @@ from django.contrib import admin # Register your models here. +from wallet.chainstate.models import * + +class RPCAdmin(admin.ModelAdmin): + + list_display = ("chain","company","alias","endpoint","username","password","auth",) + +class StateAdmin(admin.ModelAdmin): + + list_display = ("address","balance","next_time","is_active","rpc","next_time") + +admin.site.register(RPC,RPCAdmin) +admin.site.register(State,StateAdmin) \ No newline at end of file diff --git a/wallet/chainstate/apps.py b/wallet/chainstate/apps.py index 31afe02..56bdd44 100644 --- a/wallet/chainstate/apps.py +++ b/wallet/chainstate/apps.py @@ -3,4 +3,4 @@ class ChainstateConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' - name = 'chainstate' + name = 'wallet.chainstate' diff --git a/wallet/chainstate/constant.py b/wallet/chainstate/constant.py new file mode 100644 index 0000000..2787937 --- /dev/null +++ b/wallet/chainstate/constant.py @@ -0,0 +1,7 @@ +from django.utils.translation import gettext_lazy as _ + + +NORMAL="NORMAL" +AUTH_TYPE = ( + (NORMAL, _("normal")), +) \ No newline at end of file diff --git a/wallet/chainstate/migrations/0001_initial.py b/wallet/chainstate/migrations/0001_initial.py new file mode 100644 index 0000000..d61f957 --- /dev/null +++ b/wallet/chainstate/migrations/0001_initial.py @@ -0,0 +1,53 @@ +# Generated by Django 4.0.4 on 2022-05-21 12:27 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('wallet', '0009_remove_state_address_remove_state_rpc_delete_rpc_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='RPC', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created Time')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated Time')), + ('company', models.CharField(max_length=128, verbose_name='company')), + ('alias', models.CharField(blank=True, max_length=128, null=True, verbose_name='alias')), + ('endpoint', models.CharField(max_length=128, verbose_name='endpoint')), + ('username', models.CharField(blank=True, max_length=128, null=True, verbose_name='username')), + ('password', models.CharField(blank=True, max_length=128, null=True, verbose_name='password')), + ('auth', models.CharField(choices=[('NORMAL', 'normal')], default='NORMAL', max_length=128, verbose_name='auth')), + ('chain', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wallet_rpc', to='wallet.chain')), + ], + options={ + 'verbose_name': 'RPC', + 'verbose_name_plural': 'RPC', + }, + ), + migrations.CreateModel( + name='State', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created Time')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated Time')), + ('balance', models.JSONField(verbose_name='balance')), + ('next_time', models.DateTimeField(auto_now=True, help_text='When to run the next test', verbose_name='Created Time')), + ('is_active', models.BooleanField(default=True, help_text='Whether it is necessary to detect the operating status of the address', verbose_name='active')), + ('is_update', models.BooleanField(default=False, help_text='Status of address update', verbose_name='update')), + ('address', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wallet_state', to='wallet.address')), + ('rpc', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='wallet_state', to='chainstate.rpc')), + ], + options={ + 'verbose_name': 'State', + 'verbose_name_plural': 'Status', + }, + ), + ] diff --git a/wallet/chainstate/models.py b/wallet/chainstate/models.py index 71a8362..92218c3 100644 --- a/wallet/chainstate/models.py +++ b/wallet/chainstate/models.py @@ -1,3 +1,60 @@ from django.db import models +from django.utils.translation import gettext_lazy as _ # Create your models here. +from wallet.models import Chain,CreateUpdateTracker,Address +from wallet.chainstate.constant import * + +class RPC(CreateUpdateTracker): + chain = models.ForeignKey(Chain, related_name='wallet_rpc', on_delete=models.CASCADE) + company = models.CharField(verbose_name=_("company"),max_length=128) + alias = models.CharField(verbose_name=_("alias"),max_length=128,blank=True,null=True,) + endpoint = models.CharField(verbose_name=_("endpoint"),max_length=128) + username = models.CharField(verbose_name=_("username"),max_length=128,blank=True,null=True,) + password = models.CharField(verbose_name=_("password"),max_length=128,blank=True,null=True,) + auth = models.CharField(verbose_name=_("auth"),max_length=128,choices=AUTH_TYPE,default=NORMAL) + + def __str__(self): + return f"{self.alias}-[{self.company}]" + + class Meta: + verbose_name = _('RPC') + verbose_name_plural = _('RPC') + + +class StateManager(models.Manager): + def get_queryset(self): + return super().get_queryset().filter(is_active=True) + +class State(CreateUpdateTracker): + objects = StateManager() + + address = models.ForeignKey(Address, related_name="wallet_state",on_delete=models.CASCADE) + balance = models.JSONField(verbose_name=_('balance')) + next_time = models.DateTimeField( + _("Created Time"),editable=False, + auto_now=True, + help_text=_( + "When to run the next test" + ) + ) + is_active = models.BooleanField( + verbose_name=_('active'),default=True, + help_text=_( + "Whether it is necessary to detect the operating status of the address" + ) + ) + is_update = models.BooleanField( + verbose_name=_('update'),default=False, + help_text=_( + "Status of address update" + ) + ) + rpc = models.ForeignKey(RPC, related_name="wallet_state", on_delete=models.CASCADE) + + def __str__(self): + return f"{self.is_update}" + + class Meta: + verbose_name = _('State') + verbose_name_plural = _('Status') diff --git a/wallet/constant.py b/wallet/constant.py index 01a4835..f36f7f2 100644 --- a/wallet/constant.py +++ b/wallet/constant.py @@ -8,8 +8,3 @@ (SYSTEM_LEASE,_("system lease")), ) - -NORMAL="NORMAL" -AUTH_TYPE = ( - (NORMAL, _("normal")), -) \ No newline at end of file diff --git a/wallet/migrations/0008_alter_state_options.py b/wallet/migrations/0008_alter_state_options.py new file mode 100644 index 0000000..2c3553e --- /dev/null +++ b/wallet/migrations/0008_alter_state_options.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.4 on 2022-05-21 12:24 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0007_alter_state_next_time'), + ] + + operations = [ + migrations.AlterModelOptions( + name='state', + options={'verbose_name': 'State', 'verbose_name_plural': 'Status'}, + ), + ] diff --git a/wallet/migrations/0009_remove_state_address_remove_state_rpc_delete_rpc_and_more.py b/wallet/migrations/0009_remove_state_address_remove_state_rpc_delete_rpc_and_more.py new file mode 100644 index 0000000..99fcf00 --- /dev/null +++ b/wallet/migrations/0009_remove_state_address_remove_state_rpc_delete_rpc_and_more.py @@ -0,0 +1,27 @@ +# Generated by Django 4.0.4 on 2022-05-21 12:25 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wallet', '0008_alter_state_options'), + ] + + operations = [ + migrations.RemoveField( + model_name='state', + name='address', + ), + migrations.RemoveField( + model_name='state', + name='rpc', + ), + migrations.DeleteModel( + name='RPC', + ), + migrations.DeleteModel( + name='State', + ), + ] diff --git a/wallet/models.py b/wallet/models.py index f50c17f..8c0e6ed 100644 --- a/wallet/models.py +++ b/wallet/models.py @@ -118,57 +118,3 @@ class Meta: verbose_name_plural = _('addresses') - -class RPC(CreateUpdateTracker): - chain = models.ForeignKey(Chain, related_name='wallet_rpc', on_delete=models.CASCADE) - company = models.CharField(verbose_name=_("company"),max_length=128) - alias = models.CharField(verbose_name=_("alias"),max_length=128,blank=True,null=True,) - endpoint = models.CharField(verbose_name=_("endpoint"),max_length=128) - username = models.CharField(verbose_name=_("username"),max_length=128,blank=True,null=True,) - password = models.CharField(verbose_name=_("password"),max_length=128,blank=True,null=True,) - auth = models.CharField(verbose_name=_("auth"),max_length=128,choices=AUTH_TYPE,default=NORMAL) - - def __str__(self): - return f"{self.alias}-[{self.company}]" - - class Meta: - verbose_name = _('RPC') - verbose_name_plural = _('RPC') - - -class StateManager(models.Manager): - def get_queryset(self): - return super().get_queryset().filter(is_active=True) - -class State(CreateUpdateTracker): - objects = StateManager() - - address = models.ForeignKey(Address, related_name="wallet_state",on_delete=models.CASCADE) - balance = models.JSONField(verbose_name=_('balance')) - next_time = models.DateTimeField( - _("Created Time"),editable=False, - auto_now=True, - help_text=_( - "When to run the next test" - ) - ) - is_active = models.BooleanField( - verbose_name=_('active'),default=True, - help_text=_( - "Whether it is necessary to detect the operating status of the address" - ) - ) - is_update = models.BooleanField( - verbose_name=_('update'),default=False, - help_text=_( - "Status of address update" - ) - ) - rpc = models.ForeignKey(RPC, related_name="wallet_state", on_delete=models.CASCADE) - - def __str__(self): - return f"{self.is_update}" - - class Meta: - verbose_name = _('State') - verbose_name_plural = _('Status')