From 2546772607ecb1c71662128b82b3d52049fe004d Mon Sep 17 00:00:00 2001 From: siddhant Date: Sat, 21 Feb 2026 17:00:03 +0530 Subject: [PATCH 1/5] refactor: flatten directory structure to single minichain package --- consensus/__init__.py | 3 --- main.py | 13 +++++-------- {core => minichain}/__init__.py | 8 ++++++++ minichain/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 789 bytes minichain/__pycache__/block.cpython-311.pyc | Bin 0 -> 4514 bytes minichain/__pycache__/chain.cpython-311.pyc | Bin 0 -> 4357 bytes minichain/__pycache__/contract.cpython-311.pyc | Bin 0 -> 8607 bytes minichain/__pycache__/mempool.cpython-311.pyc | Bin 0 -> 3702 bytes minichain/__pycache__/p2p.cpython-311.pyc | Bin 0 -> 5852 bytes minichain/__pycache__/pow.cpython-311.pyc | Bin 0 -> 3100 bytes minichain/__pycache__/state.cpython-311.pyc | Bin 0 -> 7546 bytes .../__pycache__/transaction.cpython-311.pyc | Bin 0 -> 3423 bytes {core => minichain}/block.py | 3 +-- {core => minichain}/chain.py | 6 +++--- {core => minichain}/contract.py | 0 {node => minichain}/mempool.py | 2 +- {network => minichain}/p2p.py | 0 {consensus => minichain}/pow.py | 0 {core => minichain}/state.py | 2 +- {core => minichain}/transaction.py | 0 network/__init__.py | 3 --- node/__init__.py | 3 --- tests/__pycache__/test_contract.cpython-311.pyc | Bin 0 -> 8070 bytes tests/__pycache__/test_core.cpython-311.pyc | Bin 0 -> 5779 bytes tests/test_contract.py | 2 +- tests/test_core.py | 2 +- 26 files changed, 21 insertions(+), 26 deletions(-) delete mode 100644 consensus/__init__.py rename {core => minichain}/__init__.py (53%) create mode 100644 minichain/__pycache__/__init__.cpython-311.pyc create mode 100644 minichain/__pycache__/block.cpython-311.pyc create mode 100644 minichain/__pycache__/chain.cpython-311.pyc create mode 100644 minichain/__pycache__/contract.cpython-311.pyc create mode 100644 minichain/__pycache__/mempool.cpython-311.pyc create mode 100644 minichain/__pycache__/p2p.cpython-311.pyc create mode 100644 minichain/__pycache__/pow.cpython-311.pyc create mode 100644 minichain/__pycache__/state.cpython-311.pyc create mode 100644 minichain/__pycache__/transaction.cpython-311.pyc rename {core => minichain}/block.py (98%) rename {core => minichain}/chain.py (96%) rename {core => minichain}/contract.py (100%) rename {node => minichain}/mempool.py (97%) rename {network => minichain}/p2p.py (100%) rename {consensus => minichain}/pow.py (100%) rename {core => minichain}/state.py (99%) rename {core => minichain}/transaction.py (100%) delete mode 100644 network/__init__.py delete mode 100644 node/__init__.py create mode 100644 tests/__pycache__/test_contract.cpython-311.pyc create mode 100644 tests/__pycache__/test_core.cpython-311.pyc diff --git a/consensus/__init__.py b/consensus/__init__.py deleted file mode 100644 index 119baf4..0000000 --- a/consensus/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .pow import mine_block, calculate_hash, MiningExceededError - -__all__ = ["mine_block", "calculate_hash", "MiningExceededError"] \ No newline at end of file diff --git a/main.py b/main.py index d9670c0..6f20cf2 100644 --- a/main.py +++ b/main.py @@ -4,10 +4,7 @@ from nacl.signing import SigningKey from nacl.encoding import HexEncoder -from core import Transaction, Blockchain, Block, State -from node import Mempool -from network import P2PNetwork -from consensus import mine_block +from minichain import Transaction, Blockchain, Block, State, Mempool, P2PNetwork, mine_block logger = logging.getLogger(__name__) @@ -81,7 +78,7 @@ async def node_loop(): logger.info("Starting MiniChain Node with Smart Contracts") state = State() - chain = Blockchain(state) + chain = Blockchain() mempool = Mempool() pending_nonce_map = {} @@ -94,7 +91,7 @@ def claim_nonce(address): pending_nonce_map[address] = next_nonce + 1 return next_nonce - network = P2PNetwork(None) + network = P2PNetwork(lambda x: None) async def _handle_network_data(data): logger.info("Received network data: %s", data) @@ -130,9 +127,9 @@ async def _handle_network_data(data): network.handler_callback = _handle_network_data try: - await _run_node(network, state, chain, mempool, pending_nonce_map, claim_nonce) + await _run_node(network, chain, mempool, pending_nonce_map, claim_nonce) finally: - await network.stop() + pass # network.stop() is not implemented async def _run_node(network, chain, mempool, pending_nonce_map, get_next_nonce): diff --git a/core/__init__.py b/minichain/__init__.py similarity index 53% rename from core/__init__.py rename to minichain/__init__.py index ce204c7..a3e42ae 100644 --- a/core/__init__.py +++ b/minichain/__init__.py @@ -1,13 +1,21 @@ +from .pow import mine_block, calculate_hash, MiningExceededError from .block import Block from .chain import Blockchain from .transaction import Transaction from .state import State from .contract import ContractMachine +from .p2p import P2PNetwork +from .mempool import Mempool __all__ = [ + "mine_block", + "calculate_hash", + "MiningExceededError", "Block", "Blockchain", "Transaction", "State", "ContractMachine", + "P2PNetwork", + "Mempool", ] diff --git a/minichain/__pycache__/__init__.cpython-311.pyc b/minichain/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3bbc2bcbbe18d445f15dd696cee1fedbbf2e2021 GIT binary patch literal 789 zcmZ`$J#W-N6ntx+&ptbsBcuQXbWpefDMcg@LWm><#f3-*&B~JH*sHr$cD>fxmyeD= zK#gc=5PyK*;nLcciteQAQn9<_B#dA^8qHhz%^N>|9gjoM=jq4Kbd3Ohm|}CB8?ipu z;u925AO;*^#2xH#7rV&ZIc&f^>{;!yA@{Lw^?(I@ghy6;EaVZ6tRAv0KE`9KeYVXf zcw%+HZt)$wgJ2HD=nKNPi*N>U^i!vT*i|8?B}q@2$j{Vvp0Rw%vWBFKtX`nv}mFr_zZw2>B*15q|o-%qoAp@*5q zlf9E;(p(5>Z2T$Vl@KfrrK>~9fg#V((2#E^Ff=k`_9`PoTbhpJUFBBd;;&BS*)OsN z%CiZrkBW4XO-O61yxQcn-YUp%qS`6ic(1afl+S-hv@?~TrWs>t`VH1P0$k4yo+s~X zBJ1Q$A@-joZ%cA0={ZRbNqyFcDw)?JPxL-cDWlC*NiLUlqW4a1us>9q>dPigpHx@Z z!3!>mB_l88Jw3zxt@^vBm5UJS;8pv7ba1!rql1TSA00eu`}kMa;}&}8;C|aj2M^jl SR)Z*VR3Itdni6Mc6k}RY&6*e3|l}( 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 B$Atg@ literal 0 HcmV?d00001 diff --git a/minichain/__pycache__/contract.cpython-311.pyc b/minichain/__pycache__/contract.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..706c270496610c2ca92cfa34224701ae5e61aef1 GIT binary patch literal 8607 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 E003XQE&u=k literal 0 HcmV?d00001 diff --git a/minichain/__pycache__/mempool.cpython-311.pyc b/minichain/__pycache__/mempool.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dca9121a5aa642573316438702f0063e4e9a23bd GIT binary patch literal 3702 zcma)9Uu@gP89$Qx>r$3%$A9A52{YS;HD_*$Em@WY&WtD?0<<1#rwq0h@P?z-9sPuHe@S`K1u6NOU16m;ZQIS&Sm|9c}m})U50-L1i0Zgc%jBFkWjPiRcGZ_hB>aFu=nMFHB^zPUuMrO2Ksfw>1rGe0oG9iNQ9AO3%BC5oTb5M0 zph^}IS0r=g36+|cJz0NEuUM4REDzxOh2Nl3fffr~=a-fn_Q{8R znGyq|BYq1bu#lNgM;%_w6AdfcvS_WF4rdYzx=cbeXp0Iqow&7P5Q$1Sp|^GUsuLDf z`iZSc>!PU?Nt$&+CQ)-n611DtKtXu1aQ@8FdnPf=rHfcU^^2w7Xe47O*T_Jvb= zP<`Y`Ib_EUKOQ-H_rkpkUcLXwpMG2GpRoHU%As3b^&tU1i84I9Fs5^F=#g^wCIgji zWCceGp%PPRYtfNj>GXQ%L8N{zZgvUHa$aA{7c3%3LP1kLC=dY?ix_m_rlrWj#f*^C z4d7aaq?wXzDY`Zt3GZ_8-aHO7ZNmw!K*#=4VmiIH$sWwt=7>f2t63^^rhNtP z(M_Rb5iDs%%}K)iY3I)ME9uoK{?5JXM1SPTySEXHPMPzaVTSSv)J_$ny5GlA$&ghf9D1jQ7tL6qP& z=A~9#QMRUApcfbNsv^S;5C|5>n&fU4~SE~Q^H2EmC=JuU;kB&pSAhfDnDEA8~Wtr zPNL^lwt*7yA(zyXhwg;zp>#D#-^Zze?e5#%)uZozGXVtNT57>gEmTtr^}&%w)F0&z zeM*%)3pBNKQbg+e+fZ9{_=GqE)DQh2kEx19{9~ z=J)JjpN%$|W#Eeezl?GWut^Ol+N`mn6SmzQ*)zn|L~TS z*$Zp9Ig4foxQ7Fw+2QEJQ3mKd90Gc=LwXH4t0t`xQH1PDT+?wurFC8uKPX75$1$i9 z_s|#ut)(d$ql6wv_rMr5j9o(2n(qPG3Z4cV3Lk5rPQr)7#~Uah-NRwP-hiA=gu&PQ zi8mvi4F0}wdHs4baiq5py?uD#IC0qfx7};W_%XB%ni6^jb{hR6cGg?)j6pMViXvtn zNP}Y-rjCwQJKs9$-g2KhN>%-LCq7&rwBy5fPS@h&c6@v*(g^*W0o(VJr?l_cOBn8= F{tE&NK9m3e literal 0 HcmV?d00001 diff --git a/minichain/__pycache__/p2p.cpython-311.pyc b/minichain/__pycache__/p2p.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..27ab87769a0cd2e05b752676fc3bbcfc9ca94d1c GIT binary patch literal 5852 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 V&nOBHaqqu>TXp~W0Twc#{{i4lTKE6} literal 0 HcmV?d00001 diff --git a/minichain/__pycache__/pow.cpython-311.pyc b/minichain/__pycache__/pow.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..04ec55c2ee722ef1c26f9fabfb2b00519de98664 GIT binary patch literal 3100 zcma)8U1;1^7QUMQ8O@C6#~#~h>d0&Ccv9C+n{HUUPDo>?vB!;D>U0-|0io#1w(J?n zl{Aer$S^G_m?f|#l-m0?FPpZTF61$f``DL)WCRfcL!k5_eVUT)OJQNp)%w8x+ST{OZ7{XizI=5G$3e+Ywpgb}8SDBtL*Jmt0VXxqQ;6>;mJdKw3Vc%Vp_lHsI!XX^IOXUNYT0zAy_3sXpA%wPi7N>#>qJ<#B;#_CjH4|3 zahWSNSAr~yWu9ffLC=ZJzb?XF@mHEPo z#@!N&qIO3Tw##aP?8&clqSP_kl5bCL-BEm?)FlBJs2L#D_GSBS8m(I)0J@BP%X#nu z5pe><^BRzSq;;%qw8uI?`mN`I2S9_T(Q55c>ka9#_W?*fY)kG?TJU&%gY4!uo$BVR zwSuU{;PwxIK5V}MSbdf399QJafR3OtD+}+u`NxaQI;XBP@+!kIw~8{q$*c<;7L>`G zS;`5kvZAq@!X35ZFKer>|0x@Ad>g7PIeuI&ZK+N`ka!sjPLL=minpAAy3T=8C%i6f zV{uJTwXDa9xQbaU@|qKEj8%;UgG!vhFbWNw6X#o|u|%6fupmxXuK=l{AJhF`%p7by znm5wZW_sF6Pd`atIZR*qcfXllw9<>!_m1e)y~_s^CVkeT&px5wIHcb&=?fNp!SG#h z;d@5>_pJKm0pbbTtwwz3V)zr7(~Y4{X&pFqBd7#)3R9adR!Wc7fdKY&qw^Vsy*gC^ zjve?UcY->qk^Nq1-FWSUG)NV#w$avqf-9{1l+(Je)_J0q5W+qkZL}i@q6YRoP8<{@ z3_YlOHeKDy7-;GPO`*1U#{dVq&qN_DeY}i=-K(Eby7$v7zsG((Tmg`E@1`5u|Hp=K z_bw-Fh;*-l4M9DG=~*yS>pQkp4|VhHMD$3FMBoceKXGPd95f;}+G5lrFpITkJ|*)~ z9HM%pJ9;RjqZOq4m5Uyrp!dZ34z1HTRz_`){5HPv?z5cmNKf}F@d!>-z~Y_Yz5iyD zl^c-cArZ8`{IW_C^aqM8uf7iVUu0#Ixh-nzklLA2S%Z`g%c8Ue(?+T&OPW|@)H2Tt zsyeBVPo*+8FRreNkYltvAfy7T02^${s;EJl260VTgY@E1=POL3#x#|Us?7MY>mE=m} zl*7ydBqw6syOpy|*=EUu!uW{@M^)rC1^mH6J}chh_|3^m;w0lUk~Ok%CnAE&RgIKP z#|y4;B7f$JWx=hsPF$1OMlx=sP9L$&372F^)?_GXj!%?UWydc{SlD)gw>gDW>_$Z+ z$cS%DL0i^Z~01yewhJ@(KV&i|np*yW^7{R)>Hwyu=!s$^Vu8Nq2Eg-JSf=WIsrlU2gLZk#C%DVO{ zZvjUF9`$>0UlskQ7ezCB8~+$F=`o8Qt0T%kM}2+nG4;=>ucwaU1IFMxX8fuZziNc8 zK8+>zX3W^D)pzYwy1Hbi`k$o64pU=hYTQbVSC@{GeP0Zj$zdxwT+KZV#_GuLkJzF3 z-{`;6c68E?ChslT(ag_5UpVp$0#bKL^bh{QdH_ZH53+~!h(V9oJ$+zDY@V_cnf>_v zxN+vHnV7Q@b4FtBC^c$~Et;vEmC6~>9Fcp)pvV3-|Lw9lF>6iCKCYM(i{G(_uN92f z3QbLKw-rsBi5V*~VwFYIOG+oMvzYx?FRcOJp1RK5d+ydUVQ6%vyCV!(_a99zlLSg6?f8J*J7Cj2cIH$)_BI7>c?oeX{vTqI B1sDJT literal 0 HcmV?d00001 diff --git a/minichain/__pycache__/state.cpython-311.pyc b/minichain/__pycache__/state.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b9045609921cc21c39204a39deadfb12db5e96c0 GIT binary patch literal 7546 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 MApJi+XOwLI-2 zmxQcP60;&l`-P%Zie+O=7mM*yBAY15S(!sT`X(}^U1Y`{@CZGE|Da_RlUqi5{9n|} z=sZ!D3mbO9-uRAHCGu4Z7uKtw>KswNWo=)!^Nwj@a2sAQOzLTP6>MF`*ug|y#MQFr zFeBfco;`YtJ-YgwO++>rptLJrniu1`hqVVm-b8gs++f){XbP>oKsx z)0qfT#b*ltgk9<~iMf^y*&qpQ<*mXGL5mqBr(%0VvK>2b5z#a}gGd{9g6r zxz_R1E$xi2ooQ-k{!;nt>NS7$`>oaY{nhuI`Hj}5T(S^1Sv4yq{k%hJZN8#8ICnk44&a(Y5{=d^gGZN%R z15M}f7(86Mej1O1ByrElnT5Pp8;!=X+sX1d2W~s)ZxcuF+-Of8yAL6x+PHQn3*ozS zrL9fff0Kz$Dlw#VP#|OlAAx~=L7|{!LHQ*pP4^(@ew^mQvuE5kBp_1Nn}zXG%|2# zlPcc&sjuqt>jx2W%XMrbnUzx6B{7Rps?M|2k$Bmt79GQMDQ?o;BqlcvcQe<0Q=5!t zGWuo;hPcZhc2FmQj=b@jgmwnvqmWAwd-4Aap`o!`wR>-WywXgaYo*TlsdERZ3;U@H zPv35(7W~vgGqJ$3O;j2exEttk^C7ZfMVfY&dIhjYIrp$08euhnPuRQ={|G(i`cu;g z>m+msrJpweT;U8im_JTMx!2_T=lls*=Ne&cMdyW?LOAu0xyjf0tq@ENN;)sK7kBjn zR|}bk9Ek@h#tV_cBxYLd z=A{Hpl&eOu(!F#=ni4!s9Vtf>Vbj{y1qLQO!$t;Jc4?4+wizv89gNyg6iC$Ti_q)Z zAb=0l316K)P*3iwC!ZW`swZ3OMPI#mpf2vKi!JrCuU`Js*q`6nS67AxIWaLFa5~W!$lH|vHKQr8%mu;u#Db9-caa{JW9IV=25op=@UH-p>^>D!tgzJ4Zio5(FbT-xQ0I9bTRWD zJ^@}UdNSaAdX#``0*nO6VPGHb`U3P?a|5G=R2YzYoBT}jk#aF`-#%j7F*h)uPyF< zyPcdkNKWl1r|y~lo2Q?Q|8DBHQ%}9$f7m*k@y}*j$t6Fz)J!h5M~~c|d;X81>0iJ5 zMET@OGxc5vNwO9Z3L4XHpNExH=zsqFxl5z@(fsIq8vP+XwZI8~L>x$6$Ye55OYj+C z8zn23BT6n;a?DDR>d9R02Nk0jyumc?_$UaHC}XE=VXqpL69pJ66c&kxh`}@{A4&z7 z3d#=dk3j5%zYZUl-U4dv6C<(&bQ_8Z6dUaDinPde5S5<^(6RfyZr7wFooRqOJYE!o zgA#<}WfAO+?nqZLy$A3x2$Hmod~ueRHn0w62cnoE1FWCX5`DqYlM4E_^H!ODQ@atw zu;ZSmv(h`Ch2ZnV#UP$v#}}ZFa=iNyh>pN=#jHo9GpPZFHj9|JO$EG+*`C ViG78GqrWUZqkaE=#S6CC{{qAw*h~Nb literal 0 HcmV?d00001 diff --git a/core/block.py b/minichain/block.py similarity index 98% rename from core/block.py rename to minichain/block.py index 23f7536..859a32a 100644 --- a/core/block.py +++ b/minichain/block.py @@ -2,8 +2,7 @@ import hashlib import json from typing import List, Optional -from core.transaction import Transaction - +from .transaction import Transaction def _sha256(data: str) -> str: return hashlib.sha256(data.encode()).hexdigest() diff --git a/core/chain.py b/minichain/chain.py similarity index 96% rename from core/chain.py rename to minichain/chain.py index 9545864..78ac73f 100644 --- a/core/chain.py +++ b/minichain/chain.py @@ -1,6 +1,6 @@ -from core.block import Block -from core.state import State -from consensus import calculate_hash +from .block import Block +from .state import State +from .pow import calculate_hash import logging import threading diff --git a/core/contract.py b/minichain/contract.py similarity index 100% rename from core/contract.py rename to minichain/contract.py diff --git a/node/mempool.py b/minichain/mempool.py similarity index 97% rename from node/mempool.py rename to minichain/mempool.py index 8bb941a..06a60d0 100644 --- a/node/mempool.py +++ b/minichain/mempool.py @@ -1,4 +1,4 @@ -from consensus.pow import calculate_hash +from .pow import calculate_hash import logging import threading diff --git a/network/p2p.py b/minichain/p2p.py similarity index 100% rename from network/p2p.py rename to minichain/p2p.py diff --git a/consensus/pow.py b/minichain/pow.py similarity index 100% rename from consensus/pow.py rename to minichain/pow.py diff --git a/core/state.py b/minichain/state.py similarity index 99% rename from core/state.py rename to minichain/state.py index 17bc68c..ce9a6f0 100644 --- a/core/state.py +++ b/minichain/state.py @@ -1,6 +1,6 @@ from nacl.hash import sha256 from nacl.encoding import HexEncoder -from core.contract import ContractMachine +from .contract import ContractMachine import copy import logging diff --git a/core/transaction.py b/minichain/transaction.py similarity index 100% rename from core/transaction.py rename to minichain/transaction.py diff --git a/network/__init__.py b/network/__init__.py deleted file mode 100644 index 742fbe2..0000000 --- a/network/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .p2p import P2PNetwork - -__all__ = ["P2PNetwork"] \ No newline at end of file diff --git a/node/__init__.py b/node/__init__.py deleted file mode 100644 index 434db3e..0000000 --- a/node/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .mempool import Mempool - -__all__ = ["Mempool"] \ No newline at end of file diff --git a/tests/__pycache__/test_contract.cpython-311.pyc b/tests/__pycache__/test_contract.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae618f99e83e2ac3dac97080d522032b0b273f25 GIT binary patch literal 8070 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 literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_core.cpython-311.pyc b/tests/__pycache__/test_core.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..84e8d89e0e87498eaeb83b3692aa458d79a04e08 GIT binary patch literal 5779 zcmeHLO>7iL7Ow8;nJLc?X!sds447v5TLxLhO=6mVk&T)*e_8IdF)yK5Py-tdwK7)sn52A|b8z;F}{@3FWk}s%P5M z_BhJVZcf|X^QOA$)vM~N@2mH!{+dk25L|En>4CO0j?h2pOZ^Jh5-xNt~wX*KUP8Z9Ck;0Iy>2CO%DVu7+w+soc_VVHoB$x+yo@)FzH!Qz>#yx_bJ@tDx z!!Wa4?xj|>3wZLb@7Yg()}fz%`e*28vffVx!94O5R8h5tp>>3glN&ZDUI-mMH_RYJ z=q$K+P}NleMJ|?$T0xbJ5jS>2CECE4G@_2Vk(wQWDn}HR0<*4K8F3^1<$hX){Z~ew zaIRpe#Q}qkwD|3nGspYhHB@5sT~NxudaLiUuAU{@4YlvAYK)lWO5dPSF7yGC`?aEG zj_K-X)#xi}y2d)#X95}xCZz&^va>Ps%Wf!fL5>HHfXftW;JZ*KkYz3KO+ zggddXH}CkcZ@P~r{~bZuT~21do#}8g9gve;$ZUI_!*iZ_S2$t*B)`>vH_qn&;7nC7u`@%)d?kl8!O6&DKSHCSko1C z)J;~1dP6H$4QWU=hDaLJJZO>(t+9b3OsaLkt2w^aht}%CO|D)%=%Y=t5xd*qpH<6{m!X5nM2OHa%eY<$|m zr>*)!TA{4~cqo4vc(%cy1lMAiR)2kKoMMH835Cgh>QC_d+ypn{Pdr%kFR15h1>wcu zll&DNNYHc*|B<#mkRA0vW)8`wcmozUMKr+C%4U_Q zhFAd%iL$PUn(mdA0f*v%tQ9*KsdHd>TT~#GYi}X+!^uV}HiLjQ4h)g?G#T@-*h{La z8}ZgnHzJqHRo$%P^t@a&)OMb1q58ZzYEUSPq6fiNhB9;6%S(PI$9Dyx*i?xk#2_Fh z(Z7-zK-%`l!e{YkS7%dpvdc+!P4Npjb~k!E`hhT=v~in*+brA$;Jds2_WJw$r!611 zJcvJx+jzHwcUyS(QUqg@jkyMYWdaH zXBr}%2Aho|)HEh(9HF39MacSwl<>;2gTDRv7S~t<0xhm`5=sP?_UQO_3R+-VsZvzM zez_>?1yy9w9Z*Rp*$aJM{3Qr)L66on7EeG{u02j@*yL^kC!lDiL_-06P$KG0nJ6Cr z7!xT8$v!F=2UBvTQXG>S_(50;ZPZqLP&FmFP@s%_5@IAI2WUYAmVs)~H0VMo*6FyB z(UHYUo;~RF__iPqgQdHny5WGBM8KVv$YjxXZ#_5Js%aeqVY% zPi>xVolkYlr8*w>+o?C4)EiTgI%gv`-r?XK7T&?y^SlssG4t8i=d!Oq6FyJc*^^H8 z{z6mQpS05 z5K?uj6PC?9YZGRZ!?eufD1Xi}AgxE&q?PaLTo)`1ZVpu2%yOf)nIRtQ5#haw84~np3rhAxL zOz9z?fj&3Bvv$hEbd)j#o0K#q*(?l+1~3PXdtxi&%!C(QUX?XNHQd6)4 zI1S%x~np+SoA z@I}aJkgbt$4sx1HuWz(l^h--{q$o-4Nf%dj&7{z96S`a|cGArVgkauTQIch`10k9x z(8?|Tag7IFx)t$C8FuRI#&~7XEJV!^YwVx&7*BnO&WbMDHQD?pQji>N3sCS-6LSkxsE|j%G c*##jr`Od9Nf4qF_@+7;LLP%(Z0`^t^0l`$EPXGV_ literal 0 HcmV?d00001 diff --git a/tests/test_contract.py b/tests/test_contract.py index 111222d..2ac6e9f 100644 --- a/tests/test_contract.py +++ b/tests/test_contract.py @@ -2,7 +2,7 @@ import sys import os -from core import State, Transaction +from minichain import State, Transaction from nacl.signing import SigningKey from nacl.encoding import HexEncoder diff --git a/tests/test_core.py b/tests/test_core.py index 1b7a189..0a818ed 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -2,7 +2,7 @@ from nacl.signing import SigningKey from nacl.encoding import HexEncoder -from core import Transaction, Blockchain, State # Removed unused imports +from minichain import Transaction, Blockchain, State # Removed unused imports class TestCore(unittest.TestCase): def setUp(self): From 59b0093d72ef5357f256c00bee0f00ac69a5ee1a Mon Sep 17 00:00:00 2001 From: siddhant Date: Sat, 21 Feb 2026 17:18:02 +0530 Subject: [PATCH 2/5] remove pycache --- .gitignore | 6 ++++++ minichain/__pycache__/__init__.cpython-311.pyc | Bin 789 -> 0 bytes minichain/__pycache__/block.cpython-311.pyc | Bin 4514 -> 0 bytes minichain/__pycache__/chain.cpython-311.pyc | Bin 4357 -> 0 bytes minichain/__pycache__/contract.cpython-311.pyc | Bin 8607 -> 0 bytes minichain/__pycache__/mempool.cpython-311.pyc | Bin 3702 -> 0 bytes minichain/__pycache__/p2p.cpython-311.pyc | Bin 5852 -> 0 bytes minichain/__pycache__/pow.cpython-311.pyc | Bin 3100 -> 0 bytes minichain/__pycache__/state.cpython-311.pyc | Bin 7546 -> 0 bytes .../__pycache__/transaction.cpython-311.pyc | Bin 3423 -> 0 bytes tests/__pycache__/test_contract.cpython-311.pyc | Bin 8070 -> 0 bytes tests/__pycache__/test_core.cpython-311.pyc | Bin 5779 -> 0 bytes 12 files changed, 6 insertions(+) delete mode 100644 minichain/__pycache__/__init__.cpython-311.pyc delete mode 100644 minichain/__pycache__/block.cpython-311.pyc delete mode 100644 minichain/__pycache__/chain.cpython-311.pyc delete mode 100644 minichain/__pycache__/contract.cpython-311.pyc delete mode 100644 minichain/__pycache__/mempool.cpython-311.pyc delete mode 100644 minichain/__pycache__/p2p.cpython-311.pyc delete mode 100644 minichain/__pycache__/pow.cpython-311.pyc delete mode 100644 minichain/__pycache__/state.cpython-311.pyc delete mode 100644 minichain/__pycache__/transaction.cpython-311.pyc delete mode 100644 tests/__pycache__/test_contract.cpython-311.pyc delete mode 100644 tests/__pycache__/test_core.cpython-311.pyc diff --git a/.gitignore b/.gitignore index 9308a4b..13ba211 100644 --- a/.gitignore +++ b/.gitignore @@ -324,3 +324,9 @@ TSWLatexianTemp* # option is specified. Footnotes are the stored in a file with suffix Notes.bib. # Uncomment the next line to have this generated file ignored. #*Notes.bib + +# Python +__pycache__/ +*.py[cod] +*$py.class +*.so diff --git a/minichain/__pycache__/__init__.cpython-311.pyc b/minichain/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 3bbc2bcbbe18d445f15dd696cee1fedbbf2e2021..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmZ`$J#W-N6ntx+&ptbsBcuQXbWpefDMcg@LWm><#f3-*&B~JH*sHr$cD>fxmyeD= zK#gc=5PyK*;nLcciteQAQn9<_B#dA^8qHhz%^N>|9gjoM=jq4Kbd3Ohm|}CB8?ipu z;u925AO;*^#2xH#7rV&ZIc&f^>{;!yA@{Lw^?(I@ghy6;EaVZ6tRAv0KE`9KeYVXf zcw%+HZt)$wgJ2HD=nKNPi*N>U^i!vT*i|8?B}q@2$j{Vvp0Rw%vWBFKtX`nv}mFr_zZw2>B*15q|o-%qoAp@*5q zlf9E;(p(5>Z2T$Vl@KfrrK>~9fg#V((2#E^Ff=k`_9`PoTbhpJUFBBd;;&BS*)OsN z%CiZrkBW4XO-O61yxQcn-YUp%qS`6ic(1afl+S-hv@?~TrWs>t`VH1P0$k4yo+s~X zBJ1Q$A@-joZ%cA0={ZRbNqyFcDw)?JPxL-cDWlC*NiLUlqW4a1us>9q>dPigpHx@Z z!3!>mB_l88Jw3zxt@^vBm5UJS;8pv7ba1!rql1TSA00eu`}kMa;}&}8;C|aj2M^jl SR)Z*VR3Itdni6Mc6k}RY&6*e3|l}( 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 B$Atg@ diff --git a/minichain/__pycache__/contract.cpython-311.pyc b/minichain/__pycache__/contract.cpython-311.pyc deleted file mode 100644 index 706c270496610c2ca92cfa34224701ae5e61aef1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8607 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 E003XQE&u=k diff --git a/minichain/__pycache__/mempool.cpython-311.pyc b/minichain/__pycache__/mempool.cpython-311.pyc deleted file mode 100644 index dca9121a5aa642573316438702f0063e4e9a23bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3702 zcma)9Uu@gP89$Qx>r$3%$A9A52{YS;HD_*$Em@WY&WtD?0<<1#rwq0h@P?z-9sPuHe@S`K1u6NOU16m;ZQIS&Sm|9c}m})U50-L1i0Zgc%jBFkWjPiRcGZ_hB>aFu=nMFHB^zPUuMrO2Ksfw>1rGe0oG9iNQ9AO3%BC5oTb5M0 zph^}IS0r=g36+|cJz0NEuUM4REDzxOh2Nl3fffr~=a-fn_Q{8R znGyq|BYq1bu#lNgM;%_w6AdfcvS_WF4rdYzx=cbeXp0Iqow&7P5Q$1Sp|^GUsuLDf z`iZSc>!PU?Nt$&+CQ)-n611DtKtXu1aQ@8FdnPf=rHfcU^^2w7Xe47O*T_Jvb= zP<`Y`Ib_EUKOQ-H_rkpkUcLXwpMG2GpRoHU%As3b^&tU1i84I9Fs5^F=#g^wCIgji zWCceGp%PPRYtfNj>GXQ%L8N{zZgvUHa$aA{7c3%3LP1kLC=dY?ix_m_rlrWj#f*^C z4d7aaq?wXzDY`Zt3GZ_8-aHO7ZNmw!K*#=4VmiIH$sWwt=7>f2t63^^rhNtP z(M_Rb5iDs%%}K)iY3I)ME9uoK{?5JXM1SPTySEXHPMPzaVTSSv)J_$ny5GlA$&ghf9D1jQ7tL6qP& z=A~9#QMRUApcfbNsv^S;5C|5>n&fU4~SE~Q^H2EmC=JuU;kB&pSAhfDnDEA8~Wtr zPNL^lwt*7yA(zyXhwg;zp>#D#-^Zze?e5#%)uZozGXVtNT57>gEmTtr^}&%w)F0&z zeM*%)3pBNKQbg+e+fZ9{_=GqE)DQh2kEx19{9~ z=J)JjpN%$|W#Eeezl?GWut^Ol+N`mn6SmzQ*)zn|L~TS z*$Zp9Ig4foxQ7Fw+2QEJQ3mKd90Gc=LwXH4t0t`xQH1PDT+?wurFC8uKPX75$1$i9 z_s|#ut)(d$ql6wv_rMr5j9o(2n(qPG3Z4cV3Lk5rPQr)7#~Uah-NRwP-hiA=gu&PQ zi8mvi4F0}wdHs4baiq5py?uD#IC0qfx7};W_%XB%ni6^jb{hR6cGg?)j6pMViXvtn zNP}Y-rjCwQJKs9$-g2KhN>%-LCq7&rwBy5fPS@h&c6@v*(g^*W0o(VJr?l_cOBn8= F{tE&NK9m3e diff --git a/minichain/__pycache__/p2p.cpython-311.pyc b/minichain/__pycache__/p2p.cpython-311.pyc deleted file mode 100644 index 27ab87769a0cd2e05b752676fc3bbcfc9ca94d1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5852 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 V&nOBHaqqu>TXp~W0Twc#{{i4lTKE6} diff --git a/minichain/__pycache__/pow.cpython-311.pyc b/minichain/__pycache__/pow.cpython-311.pyc deleted file mode 100644 index 04ec55c2ee722ef1c26f9fabfb2b00519de98664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3100 zcma)8U1;1^7QUMQ8O@C6#~#~h>d0&Ccv9C+n{HUUPDo>?vB!;D>U0-|0io#1w(J?n zl{Aer$S^G_m?f|#l-m0?FPpZTF61$f``DL)WCRfcL!k5_eVUT)OJQNp)%w8x+ST{OZ7{XizI=5G$3e+Ywpgb}8SDBtL*Jmt0VXxqQ;6>;mJdKw3Vc%Vp_lHsI!XX^IOXUNYT0zAy_3sXpA%wPi7N>#>qJ<#B;#_CjH4|3 zahWSNSAr~yWu9ffLC=ZJzb?XF@mHEPo z#@!N&qIO3Tw##aP?8&clqSP_kl5bCL-BEm?)FlBJs2L#D_GSBS8m(I)0J@BP%X#nu z5pe><^BRzSq;;%qw8uI?`mN`I2S9_T(Q55c>ka9#_W?*fY)kG?TJU&%gY4!uo$BVR zwSuU{;PwxIK5V}MSbdf399QJafR3OtD+}+u`NxaQI;XBP@+!kIw~8{q$*c<;7L>`G zS;`5kvZAq@!X35ZFKer>|0x@Ad>g7PIeuI&ZK+N`ka!sjPLL=minpAAy3T=8C%i6f zV{uJTwXDa9xQbaU@|qKEj8%;UgG!vhFbWNw6X#o|u|%6fupmxXuK=l{AJhF`%p7by znm5wZW_sF6Pd`atIZR*qcfXllw9<>!_m1e)y~_s^CVkeT&px5wIHcb&=?fNp!SG#h z;d@5>_pJKm0pbbTtwwz3V)zr7(~Y4{X&pFqBd7#)3R9adR!Wc7fdKY&qw^Vsy*gC^ zjve?UcY->qk^Nq1-FWSUG)NV#w$avqf-9{1l+(Je)_J0q5W+qkZL}i@q6YRoP8<{@ z3_YlOHeKDy7-;GPO`*1U#{dVq&qN_DeY}i=-K(Eby7$v7zsG((Tmg`E@1`5u|Hp=K z_bw-Fh;*-l4M9DG=~*yS>pQkp4|VhHMD$3FMBoceKXGPd95f;}+G5lrFpITkJ|*)~ z9HM%pJ9;RjqZOq4m5Uyrp!dZ34z1HTRz_`){5HPv?z5cmNKf}F@d!>-z~Y_Yz5iyD zl^c-cArZ8`{IW_C^aqM8uf7iVUu0#Ixh-nzklLA2S%Z`g%c8Ue(?+T&OPW|@)H2Tt zsyeBVPo*+8FRreNkYltvAfy7T02^${s;EJl260VTgY@E1=POL3#x#|Us?7MY>mE=m} zl*7ydBqw6syOpy|*=EUu!uW{@M^)rC1^mH6J}chh_|3^m;w0lUk~Ok%CnAE&RgIKP z#|y4;B7f$JWx=hsPF$1OMlx=sP9L$&372F^)?_GXj!%?UWydc{SlD)gw>gDW>_$Z+ z$cS%DL0i^Z~01yewhJ@(KV&i|np*yW^7{R)>Hwyu=!s$^Vu8Nq2Eg-JSf=WIsrlU2gLZk#C%DVO{ zZvjUF9`$>0UlskQ7ezCB8~+$F=`o8Qt0T%kM}2+nG4;=>ucwaU1IFMxX8fuZziNc8 zK8+>zX3W^D)pzYwy1Hbi`k$o64pU=hYTQbVSC@{GeP0Zj$zdxwT+KZV#_GuLkJzF3 z-{`;6c68E?ChslT(ag_5UpVp$0#bKL^bh{QdH_ZH53+~!h(V9oJ$+zDY@V_cnf>_v zxN+vHnV7Q@b4FtBC^c$~Et;vEmC6~>9Fcp)pvV3-|Lw9lF>6iCKCYM(i{G(_uN92f z3QbLKw-rsBi5V*~VwFYIOG+oMvzYx?FRcOJp1RK5d+ydUVQ6%vyCV!(_a99zlLSg6?f8J*J7Cj2cIH$)_BI7>c?oeX{vTqI B1sDJT diff --git a/minichain/__pycache__/state.cpython-311.pyc b/minichain/__pycache__/state.cpython-311.pyc deleted file mode 100644 index b9045609921cc21c39204a39deadfb12db5e96c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7546 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 MApJi+XOwLI-2 zmxQcP60;&l`-P%Zie+O=7mM*yBAY15S(!sT`X(}^U1Y`{@CZGE|Da_RlUqi5{9n|} z=sZ!D3mbO9-uRAHCGu4Z7uKtw>KswNWo=)!^Nwj@a2sAQOzLTP6>MF`*ug|y#MQFr zFeBfco;`YtJ-YgwO++>rptLJrniu1`hqVVm-b8gs++f){XbP>oKsx z)0qfT#b*ltgk9<~iMf^y*&qpQ<*mXGL5mqBr(%0VvK>2b5z#a}gGd{9g6r zxz_R1E$xi2ooQ-k{!;nt>NS7$`>oaY{nhuI`Hj}5T(S^1Sv4yq{k%hJZN8#8ICnk44&a(Y5{=d^gGZN%R z15M}f7(86Mej1O1ByrElnT5Pp8;!=X+sX1d2W~s)ZxcuF+-Of8yAL6x+PHQn3*ozS zrL9fff0Kz$Dlw#VP#|OlAAx~=L7|{!LHQ*pP4^(@ew^mQvuE5kBp_1Nn}zXG%|2# zlPcc&sjuqt>jx2W%XMrbnUzx6B{7Rps?M|2k$Bmt79GQMDQ?o;BqlcvcQe<0Q=5!t zGWuo;hPcZhc2FmQj=b@jgmwnvqmWAwd-4Aap`o!`wR>-WywXgaYo*TlsdERZ3;U@H zPv35(7W~vgGqJ$3O;j2exEttk^C7ZfMVfY&dIhjYIrp$08euhnPuRQ={|G(i`cu;g z>m+msrJpweT;U8im_JTMx!2_T=lls*=Ne&cMdyW?LOAu0xyjf0tq@ENN;)sK7kBjn zR|}bk9Ek@h#tV_cBxYLd z=A{Hpl&eOu(!F#=ni4!s9Vtf>Vbj{y1qLQO!$t;Jc4?4+wizv89gNyg6iC$Ti_q)Z zAb=0l316K)P*3iwC!ZW`swZ3OMPI#mpf2vKi!JrCuU`Js*q`6nS67AxIWaLFa5~W!$lH|vHKQr8%mu;u#Db9-caa{JW9IV=25op=@UH-p>^>D!tgzJ4Zio5(FbT-xQ0I9bTRWD zJ^@}UdNSaAdX#``0*nO6VPGHb`U3P?a|5G=R2YzYoBT}jk#aF`-#%j7F*h)uPyF< zyPcdkNKWl1r|y~lo2Q?Q|8DBHQ%}9$f7m*k@y}*j$t6Fz)J!h5M~~c|d;X81>0iJ5 zMET@OGxc5vNwO9Z3L4XHpNExH=zsqFxl5z@(fsIq8vP+XwZI8~L>x$6$Ye55OYj+C z8zn23BT6n;a?DDR>d9R02Nk0jyumc?_$UaHC}XE=VXqpL69pJ66c&kxh`}@{A4&z7 z3d#=dk3j5%zYZUl-U4dv6C<(&bQ_8Z6dUaDinPde5S5<^(6RfyZr7wFooRqOJYE!o zgA#<}WfAO+?nqZLy$A3x2$Hmod~ueRHn0w62cnoE1FWCX5`DqYlM4E_^H!ODQ@atw zu;ZSmv(h`Ch2ZnV#UP$v#}}ZFa=iNyh>pN=#jHo9GpPZFHj9|JO$EG+*`C ViG78GqrWUZqkaE=#S6CC{{qAw*h~Nb diff --git a/tests/__pycache__/test_contract.cpython-311.pyc b/tests/__pycache__/test_contract.cpython-311.pyc deleted file mode 100644 index ae618f99e83e2ac3dac97080d522032b0b273f25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8070 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 diff --git a/tests/__pycache__/test_core.cpython-311.pyc b/tests/__pycache__/test_core.cpython-311.pyc deleted file mode 100644 index 84e8d89e0e87498eaeb83b3692aa458d79a04e08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5779 zcmeHLO>7iL7Ow8;nJLc?X!sds447v5TLxLhO=6mVk&T)*e_8IdF)yK5Py-tdwK7)sn52A|b8z;F}{@3FWk}s%P5M z_BhJVZcf|X^QOA$)vM~N@2mH!{+dk25L|En>4CO0j?h2pOZ^Jh5-xNt~wX*KUP8Z9Ck;0Iy>2CO%DVu7+w+soc_VVHoB$x+yo@)FzH!Qz>#yx_bJ@tDx z!!Wa4?xj|>3wZLb@7Yg()}fz%`e*28vffVx!94O5R8h5tp>>3glN&ZDUI-mMH_RYJ z=q$K+P}NleMJ|?$T0xbJ5jS>2CECE4G@_2Vk(wQWDn}HR0<*4K8F3^1<$hX){Z~ew zaIRpe#Q}qkwD|3nGspYhHB@5sT~NxudaLiUuAU{@4YlvAYK)lWO5dPSF7yGC`?aEG zj_K-X)#xi}y2d)#X95}xCZz&^va>Ps%Wf!fL5>HHfXftW;JZ*KkYz3KO+ zggddXH}CkcZ@P~r{~bZuT~21do#}8g9gve;$ZUI_!*iZ_S2$t*B)`>vH_qn&;7nC7u`@%)d?kl8!O6&DKSHCSko1C z)J;~1dP6H$4QWU=hDaLJJZO>(t+9b3OsaLkt2w^aht}%CO|D)%=%Y=t5xd*qpH<6{m!X5nM2OHa%eY<$|m zr>*)!TA{4~cqo4vc(%cy1lMAiR)2kKoMMH835Cgh>QC_d+ypn{Pdr%kFR15h1>wcu zll&DNNYHc*|B<#mkRA0vW)8`wcmozUMKr+C%4U_Q zhFAd%iL$PUn(mdA0f*v%tQ9*KsdHd>TT~#GYi}X+!^uV}HiLjQ4h)g?G#T@-*h{La z8}ZgnHzJqHRo$%P^t@a&)OMb1q58ZzYEUSPq6fiNhB9;6%S(PI$9Dyx*i?xk#2_Fh z(Z7-zK-%`l!e{YkS7%dpvdc+!P4Npjb~k!E`hhT=v~in*+brA$;Jds2_WJw$r!611 zJcvJx+jzHwcUyS(QUqg@jkyMYWdaH zXBr}%2Aho|)HEh(9HF39MacSwl<>;2gTDRv7S~t<0xhm`5=sP?_UQO_3R+-VsZvzM zez_>?1yy9w9Z*Rp*$aJM{3Qr)L66on7EeG{u02j@*yL^kC!lDiL_-06P$KG0nJ6Cr z7!xT8$v!F=2UBvTQXG>S_(50;ZPZqLP&FmFP@s%_5@IAI2WUYAmVs)~H0VMo*6FyB z(UHYUo;~RF__iPqgQdHny5WGBM8KVv$YjxXZ#_5Js%aeqVY% zPi>xVolkYlr8*w>+o?C4)EiTgI%gv`-r?XK7T&?y^SlssG4t8i=d!Oq6FyJc*^^H8 z{z6mQpS05 z5K?uj6PC?9YZGRZ!?eufD1Xi}AgxE&q?PaLTo)`1ZVpu2%yOf)nIRtQ5#haw84~np3rhAxL zOz9z?fj&3Bvv$hEbd)j#o0K#q*(?l+1~3PXdtxi&%!C(QUX?XNHQd6)4 zI1S%x~np+SoA z@I}aJkgbt$4sx1HuWz(l^h--{q$o-4Nf%dj&7{z96S`a|cGArVgkauTQIch`10k9x z(8?|Tag7IFx)t$C8FuRI#&~7XEJV!^YwVx&7*BnO&WbMDHQD?pQji>N3sCS-6LSkxsE|j%G c*##jr`Od9Nf4qF_@+7;LLP%(Z0`^t^0l`$EPXGV_ From b9bdaf7906fd54bfa676efca359b16346eee5d46 Mon Sep 17 00:00:00 2001 From: siddhant Date: Sun, 22 Feb 2026 15:05:28 +0530 Subject: [PATCH 3/5] fix(pr1): address code review feedback on .gitignore and main.py --- main.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 6f20cf2..21c6c31 100644 --- a/main.py +++ b/main.py @@ -77,21 +77,20 @@ def sync_nonce(state, pending_nonce_map, address): async def node_loop(): logger.info("Starting MiniChain Node with Smart Contracts") - state = State() chain = Blockchain() mempool = Mempool() pending_nonce_map = {} def claim_nonce(address): - account = state.get_account(address) + account = chain.state.get_account(address) account_nonce = account.get("nonce", 0) if account else 0 local_nonce = pending_nonce_map.get(address, account_nonce) next_nonce = max(account_nonce, local_nonce) pending_nonce_map[address] = next_nonce + 1 return next_nonce - network = P2PNetwork(lambda x: None) + network = P2PNetwork(lambda _: None) async def _handle_network_data(data): logger.info("Received network data: %s", data) From f340d17e35ea3a9842239b72bb760bee31ba53c2 Mon Sep 17 00:00:00 2001 From: siddhant Date: Sun, 22 Feb 2026 17:41:54 +0530 Subject: [PATCH 4/5] fix(pr1): address code review feedback on type hints and cleanup cleanup --- main.py | 4 ++-- minichain/p2p.py | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 21c6c31..f6ee5fc 100644 --- a/main.py +++ b/main.py @@ -82,7 +82,7 @@ async def node_loop(): pending_nonce_map = {} - def claim_nonce(address): + def claim_nonce(address) -> int: account = chain.state.get_account(address) account_nonce = account.get("nonce", 0) if account else 0 local_nonce = pending_nonce_map.get(address, account_nonce) @@ -128,7 +128,7 @@ async def _handle_network_data(data): try: await _run_node(network, chain, mempool, pending_nonce_map, claim_nonce) finally: - pass # network.stop() is not implemented + await network.stop() async def _run_node(network, chain, mempool, pending_nonce_map, get_next_nonce): diff --git a/minichain/p2p.py b/minichain/p2p.py index ef0a9dd..23022a1 100644 --- a/minichain/p2p.py +++ b/minichain/p2p.py @@ -29,6 +29,13 @@ async def start(self): logger.info("Network: Listening on /ip4/0.0.0.0/tcp/0") # In real libp2p, we would await host.start() here + async def stop(self): + """Clean up network resources cleanly upon shutdown.""" + logger.info("Network: Shutting down") + if self.pubsub: + # Assuming a mock/real pubsub might need closing in the future + self.pubsub = None + async def _broadcast_message(self, topic, msg_type, payload): msg = json.dumps({"type": msg_type, "data": payload}) if self.pubsub: From 2305a548fe2a27acd7501210d91db04134f2043f Mon Sep 17 00:00:00 2001 From: siddhant Date: Sun, 22 Feb 2026 17:59:17 +0530 Subject: [PATCH 5/5] fix(pr1): refactor P2PNetwork handler assignment and finalize stop cleanup --- main.py | 4 ++-- minichain/p2p.py | 34 ++++++++++++++++++++++++++++------ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index f6ee5fc..add86c1 100644 --- a/main.py +++ b/main.py @@ -90,7 +90,7 @@ def claim_nonce(address) -> int: pending_nonce_map[address] = next_nonce + 1 return next_nonce - network = P2PNetwork(lambda _: None) + network = P2PNetwork() async def _handle_network_data(data): logger.info("Received network data: %s", data) @@ -123,7 +123,7 @@ async def _handle_network_data(data): except Exception: logger.exception("Error processing network data: %s", data) - network.handler_callback = _handle_network_data + network.register_handler(_handle_network_data) try: await _run_node(network, chain, mempool, pending_nonce_map, claim_nonce) diff --git a/minichain/p2p.py b/minichain/p2p.py index 23022a1..aacbf49 100644 --- a/minichain/p2p.py +++ b/minichain/p2p.py @@ -19,11 +19,16 @@ class P2PNetwork: } """ - def __init__(self, handler_callback): + def __init__(self, handler_callback=None): + self._handler_callback = None + if handler_callback is not None: + self.register_handler(handler_callback) + self.pubsub = None # Will be set in real implementation + + def register_handler(self, handler_callback): if not callable(handler_callback): raise ValueError("handler_callback must be callable") - self.handler_callback = handler_callback - self.pubsub = None # Will be set in real implementation + self._handler_callback = handler_callback async def start(self): logger.info("Network: Listening on /ip4/0.0.0.0/tcp/0") @@ -33,8 +38,22 @@ async def stop(self): """Clean up network resources cleanly upon shutdown.""" logger.info("Network: Shutting down") if self.pubsub: - # Assuming a mock/real pubsub might need closing in the future - self.pubsub = None + try: + shutdown_meth = None + for method_name in ('close', 'stop', 'aclose', 'shutdown'): + if hasattr(self.pubsub, method_name): + shutdown_meth = getattr(self.pubsub, method_name) + break + + if shutdown_meth: + import asyncio + res = shutdown_meth() + if asyncio.iscoroutine(res): + await res + except Exception as e: + logger.error("Network: Error shutting down pubsub: %s", e) + finally: + self.pubsub = None async def _broadcast_message(self, topic, msg_type, payload): msg = json.dumps({"type": msg_type, "data": payload}) @@ -91,6 +110,9 @@ async def handle_message(self, msg): return try: - await self.handler_callback(data) + if self._handler_callback: + await self._handler_callback(data) + else: + logger.warning("Network Error: No handler_callback registered") except Exception: logger.exception("Error in network handler callback for data: %s", data)