diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index a3ed135..b434ff3 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -2,14 +2,20 @@ on: workflow_dispatch: inputs: buildImage: - description: 'Build Docker Image according to the environment' + description: 'Build and push Docker Image according to the environment' default: 'false' commitVersionTag: description: 'The image tag will be retrieved from the bee version command' default: 'false' beeVersion: description: 'The official bee image tag that the image will be built on. Default: last supported version' - default: '0.5.3' + default: 'latest' + beeVersionAsCommitHash: + description: 'The beeVersion parameter will be interpreted as a source code commit hash that the bee base image will be built on' + default: 'false' + stateCommit: + description: 'The images will have cheques by the traffic generation' + default: 'false' push: branches: - 'master' @@ -21,6 +27,8 @@ env: BEE_IMAGE_PREFIX: 'docker.pkg.github.com/ethersphere/bee-factory' COMMIT_VERSION_TAG: ${{ github.event.inputs.commitVersionTag }} BEE_VERSION: ${{ github.event.inputs.beeVersion }} + BUILD_IMAGE: ${{ github.event.inputs.beeVersionAsCommitHash }} + STATE_COMMIT: ${{ github.event.inputs.stateCommit }} jobs: bee-images: @@ -44,7 +52,14 @@ jobs: run: npm ci - name: Build images run: | - npm run build:env + BUILD_PARAMS="" + if [ $BUILD_IMAGE == 'true' ] ; then + BUILD_PARAMS+=" --build-base-bee --base-bee-commit-hash=$BEE_VERSION" + fi + if [ $STATE_COMMIT == 'true' ] ; then + BUILD_PARAMS+=" --gen-traffic" + fi + npm run build:env -- $BUILD_PARAMS - name: Publish if it was clicked manually if: ${{ github.event.inputs.buildImage == 'true' && success() }} run: | diff --git a/.gitignore b/.gitignore index b51ea71..50b88f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ node_modules/ -build/ \ No newline at end of file +build/ +# In case of building bee image, the bee source code will be cloned to this folder +bee/ diff --git a/contracts/PostageStamp.bytecode b/contracts/PostageStamp.bytecode index 662ed4b..e5cf979 100644 --- a/contracts/PostageStamp.bytecode +++ b/contracts/PostageStamp.bytecode @@ -1 +1 @@ -0x60806040523480156200001157600080fd5b50604051620018de380380620018de833981810160405260208110156200003757600080fd5b50516001805460ff19169055600380546001600160a01b0319166001600160a01b0383161790556200006b6000336200009e565b620000977f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336200009e565b50620001b2565b620000aa8282620000ae565b5050565b600082815260208181526040909120620000d391839062000f9f62000127821b17901c565b15620000aa57620000e362000147565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200013e836001600160a01b0384166200014b565b90505b92915050565b3390565b60006200015983836200019a565b620001915750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000141565b50600062000141565b60009081526001919091016020526040902054151590565b61171c80620001c26000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063a217fddf116100c3578063d547741f1161007c578063d547741f1461036f578063d71ba7c41461039b578063e63ab1e9146103b8578063e9563f05146103c0578063f7b188a5146103fb578063f90ce5ba1461040357610158565b8063a217fddf146102d0578063b545ebc0146102d8578063b67644b9146102e0578063b998902f14610303578063c81e25ab1461030b578063ca15c8731461035257610158565b806351b17cd01161011557806351b17cd0146102385780635c975abb146102405780638456cb591461025c5780639010d07c1461026457806391b7f5ed1461028757806391d14854146102a457610158565b8063053f14da1461015d578063248a9ca3146101775780632f2ff15d1461019457806336568abe146101c2578063420fc4db146101ee57806347aab79b14610212575b600080fd5b61016561040b565b60408051918252519081900360200190f35b6101656004803603602081101561018d57600080fd5b5035610411565b6101c0600480360360408110156101aa57600080fd5b50803590602001356001600160a01b0316610426565b005b6101c0600480360360408110156101d857600080fd5b50803590602001356001600160a01b0316610492565b6101f66104f3565b604080516001600160a01b039092168252519081900360200190f35b6101c06004803603604081101561022857600080fd5b508035906020013560ff16610502565b610165610700565b61024861072f565b604080519115158252519081900360200190f35b6101c0610738565b6101f66004803603604081101561027a57600080fd5b50803590602001356107a7565b6101c06004803603602081101561029d57600080fd5b50356107c8565b610248600480360360408110156102ba57600080fd5b50803590602001356001600160a01b0316610880565b610165610898565b61016561089d565b6101c0600480360360408110156102f657600080fd5b50803590602001356108a3565b610165610ae8565b6103286004803603602081101561032157600080fd5b5035610b0c565b604080516001600160a01b03909416845260ff909216602084015282820152519081900360600190f35b6101656004803603602081101561036857600080fd5b5035610b3b565b6101c06004803603604081101561038557600080fd5b50803590602001356001600160a01b0316610b52565b610165600480360360208110156103b157600080fd5b5035610bab565b610165610c29565b6101c0600480360360808110156103d657600080fd5b506001600160a01b038135169060208101359060ff6040820135169060600135610c4d565b6101c0610f2c565b610165610f99565b60055481565b60009081526020819052604090206002015490565b60008281526020819052604090206002015461044990610444610fb4565b610880565b6104845760405162461bcd60e51b815260040180806020018281038252602f8152602001806115cf602f913960400191505060405180910390fd5b61048e8282610fb8565b5050565b61049a610fb4565b6001600160a01b0316816001600160a01b0316146104e95760405162461bcd60e51b815260040180806020018281038252602f815260200180611696602f913960400191505060405180910390fd5b61048e8282611021565b6003546001600160a01b031681565b60015460ff161561054d576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600082815260026020526040902080546001600160a01b031633146105ab576040805162461bcd60e51b815260206004820152600f60248201526e3737ba103130ba31b41037bbb732b960891b604482015290519081900360640190fd5b805460ff600160a01b909104811690831611610605576040805162461bcd60e51b81526020600482015260146024820152736465707468206e6f7420696e6372656173696e6760601b604482015290519081900360640190fd5b61060d610700565b81600101541161065c576040805162461bcd60e51b815260206004820152601560248201527418985d18da08185b1c9958591e48195e1c1a5c9959605a1b604482015290519081900360640190fd5b805460ff600160a01b90910481168303906000906106899060019084161b61068387610bab565b9061108a565b835460ff60a01b1916600160a01b60ff87160217845590506106b3816106ad610700565b906110cc565b600184018190556040805160ff871681526020810192909252805187927faf27998ec15e9d3809edad41aec1b5551d8412e71bd07c91611a0237ead1dc8e92908290030190a25050505050565b60065460055460009143039082906107189083611126565b60045490915061072890826110cc565b9250505090565b60015460ff1690565b6107627f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610880565b61079d5760405162461bcd60e51b81526004018080602001828103825260228152602001806116c56022913960400191505060405180910390fd5b6107a561117f565b565b60008281526020819052604081206107bf908361121c565b90505b92915050565b6107f27fdd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d833610880565b61082d5760405162461bcd60e51b815260040180806020018281038252602381526020018061164f6023913960400191505060405180910390fd5b600554156108415761083d610700565b6004555b6005819055436006556040805182815290517fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a9181900360200190a150565b60008281526020819052604081206107bf9083611228565b600081565b60045481565b60015460ff16156108ee576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600082815260026020526040902080546001600160a01b031661094f576040805162461bcd60e51b815260206004820152601460248201527318985d18da08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b610957610700565b8160010154116109a6576040805162461bcd60e51b815260206004820152601560248201527418985d18da08185b1c9958591e48195e1c1a5c9959605a1b604482015290519081900360640190fd5b80546000906109c49084906001600160a01b90910460ff161b611126565b600354604080516323b872dd60e01b81523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610a2157600080fd5b505af1158015610a35573d6000803e3d6000fd5b505050506040513d6020811015610a4b57600080fd5b5051610a90576040805162461bcd60e51b815260206004820152600f60248201526e3330b4b632b2103a3930b739b332b960891b604482015290519081900360640190fd5b6001820154610a9f90846110cc565b60018301819055604080518381526020810192909252805186927faf5756c62d6c0722ef9be1f82bef97ab06ea5aea7f3eb8ad348422079f01d88d92908290030190a250505050565b7fdd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d881565b600260205260009081526040902080546001909101546001600160a01b03821691600160a01b900460ff169083565b60008181526020819052604081206107c29061123d565b600082815260208190526040902060020154610b7090610444610fb4565b6104e95760405162461bcd60e51b81526004018080602001828103825260308152602001806115fe6030913960400191505060405180910390fd5b600081815260026020526040812080546001600160a01b0316610c0c576040805162461bcd60e51b815260206004820152601460248201527318985d18da08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b610c22610c17610700565b600183015490611248565b9392505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60015460ff1615610c98576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001600160a01b038416610cf3576040805162461bcd60e51b815260206004820181905260248201527f6f776e65722063616e6e6f7420626520746865207a65726f2061646472657373604482015290519081900360640190fd5b60408051336020808301919091528183018490528251808303840181526060909201835281519181019190912060008181526002909252919020546001600160a01b031615610d80576040805162461bcd60e51b8152602060048201526014602482015273626174636820616c72656164792065786973747360601b604482015290519081900360640190fd5b6000610d9285600160ff87161b611126565b600354604080516323b872dd60e01b81523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610def57600080fd5b505af1158015610e03573d6000803e3d6000fd5b505050506040513d6020811015610e1957600080fd5b5051610e5e576040805162461bcd60e51b815260206004820152600f60248201526e3330b4b632b2103a3930b739b332b960891b604482015290519081900360640190fd5b6000610e6c866106ad610700565b60408051606080820183526001600160a01b038b811680845260ff8b811660208087018281528789018a815260008e8152600284528a90209851895492516001600160a01b031990931697169690961760ff60a01b1916600160a01b9190941602929092178655925160019095019490945584518881529384018690528385015290820152905191925084917f3f6ec1ed9250a6952fabac07c6eb103550dc65175373eea432fd115ce8bb2246916080908290030190a250505050505050565b610f567f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610880565b610f915760405162461bcd60e51b81526004018080602001828103825260248152602001806116726024913960400191505060405180910390fd5b6107a561128a565b60065481565b60006107bf836001600160a01b03841661130b565b3390565b6000828152602081905260409020610fd09082610f9f565b1561048e57610fdd610fb4565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020819052604090206110399082611355565b1561048e57611046610fb4565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60006107bf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061136a565b6000828201838110156107bf576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082611135575060006107c2565b8282028284828161114257fe5b04146107bf5760405162461bcd60e51b815260040180806020018281038252602181526020018061162e6021913960400191505060405180910390fd5b60015460ff16156111ca576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586111ff610fb4565b604080516001600160a01b039092168252519081900360200190a1565b60006107bf838361140c565b60006107bf836001600160a01b038416611470565b60006107c282611488565b60006107bf83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061148c565b60015460ff166112d8576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6111ff610fb4565b60006113178383611470565b61134d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107c2565b5060006107c2565b60006107bf836001600160a01b0384166114e6565b600081836113f65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113bb5781810151838201526020016113a3565b50505050905090810190601f1680156113e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161140257fe5b0495945050505050565b8154600090821061144e5760405162461bcd60e51b81526004018080602001828103825260228152602001806115ad6022913960400191505060405180910390fd5b82600001828154811061145d57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600081848411156114de5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156113bb5781810151838201526020016113a3565b505050900390565b600081815260018301602052604081205480156115a2578354600019808301919081019060009087908390811061151957fe5b906000526020600020015490508087600001848154811061153657fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061156657fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506107c2565b60009150506107c256fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f6e6c79207072696365206f7261636c652063616e20736574207468652070726963656f6e6c79207061757365722063616e20756e70617573652074686520636f6e7472616374416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c666f6e6c79207061757365722063616e2070617573652074686520636f6e7472616374a26469706673582212209800358331d16c768a821c1e17f856aea0fd244e1026a2da8d2c34c5684e143364736f6c63430007060033 \ No newline at end of file +0x60806040523480156200001157600080fd5b5060405162001a3038038062001a30833981810160405260208110156200003757600080fd5b50516001805460ff19169055600380546001600160a01b0319166001600160a01b0383161790556200006b6000336200009e565b620000977f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a336200009e565b50620001b2565b620000aa8282620000ae565b5050565b600082815260208181526040909120620000d3918390620010f162000127821b17901c565b15620000aa57620000e362000147565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200013e836001600160a01b0384166200014b565b90505b92915050565b3390565b60006200015983836200019a565b620001915750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000141565b50600062000141565b60009081526001919091016020526040902054151590565b61186e80620001c26000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806391d14854116100c3578063ca15c8731161007c578063ca15c873146103a7578063d547741f146103c4578063d71ba7c4146103f0578063e63ab1e91461040d578063f7b188a514610415578063f90ce5ba1461041d57610158565b806391d14854146102f1578063a217fddf1461031d578063b545ebc014610325578063b67644b91461032d578063b998902f14610350578063c81e25ab1461035857610158565b806351b17cd01161011557806351b17cd0146102385780635239af71146102405780635c975abb1461028d5780638456cb59146102a95780639010d07c146102b157806391b7f5ed146102d457610158565b8063053f14da1461015d578063248a9ca3146101775780632f2ff15d1461019457806336568abe146101c2578063420fc4db146101ee57806347aab79b14610212575b600080fd5b610165610425565b60408051918252519081900360200190f35b6101656004803603602081101561018d57600080fd5b503561042b565b6101c0600480360360408110156101aa57600080fd5b50803590602001356001600160a01b0316610440565b005b6101c0600480360360408110156101d857600080fd5b50803590602001356001600160a01b03166104ac565b6101f661050d565b604080516001600160a01b039092168252519081900360200190f35b6101c06004803603604081101561022857600080fd5b508035906020013560ff1661051c565b61016561076d565b6101c0600480360360c081101561025657600080fd5b506001600160a01b038135169060208101359060ff604082013581169160608101359091169060808101359060a00135151561079c565b610295610b55565b604080519115158252519081900360200190f35b6101c0610b5e565b6101f6600480360360408110156102c757600080fd5b5080359060200135610bcd565b6101c0600480360360208110156102ea57600080fd5b5035610bee565b6102956004803603604081101561030757600080fd5b50803590602001356001600160a01b0316610ca6565b610165610cbe565b610165610cc3565b6101c06004803603604081101561034357600080fd5b5080359060200135610cc9565b610165610f0e565b6103756004803603602081101561036e57600080fd5b5035610f32565b604080516001600160a01b03909516855260ff9093166020850152901515838301526060830152519081900360800190f35b610165600480360360208110156103bd57600080fd5b5035610f6c565b6101c0600480360360408110156103da57600080fd5b50803590602001356001600160a01b0316610f83565b6101656004803603602081101561040657600080fd5b5035610fdc565b61016561105a565b6101c061107e565b6101656110eb565b60055481565b60009081526020819052604090206002015490565b6000828152602081905260409020600201546104639061045e611106565b610ca6565b61049e5760405162461bcd60e51b815260040180806020018281038252602f815260200180611721602f913960400191505060405180910390fd5b6104a8828261110a565b5050565b6104b4611106565b6001600160a01b0316816001600160a01b0316146105035760405162461bcd60e51b815260040180806020018281038252602f8152602001806117e8602f913960400191505060405180910390fd5b6104a88282611173565b6003546001600160a01b031681565b60015460ff1615610567576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600082815260026020526040902080546001600160a01b031633146105c5576040805162461bcd60e51b815260206004820152600f60248201526e3737ba103130ba31b41037bbb732b960891b604482015290519081900360640190fd5b8054600160a81b900460ff1615610618576040805162461bcd60e51b8152602060048201526012602482015271626174636820697320696d6d757461626c6560701b604482015290519081900360640190fd5b805460ff600160a01b909104811690831611610672576040805162461bcd60e51b81526020600482015260146024820152736465707468206e6f7420696e6372656173696e6760601b604482015290519081900360640190fd5b61067a61076d565b8160010154116106c9576040805162461bcd60e51b815260206004820152601560248201527418985d18da08185b1c9958591e48195e1c1a5c9959605a1b604482015290519081900360640190fd5b805460ff600160a01b90910481168303906000906106f69060019084161b6106f087610fdc565b906111dc565b835460ff60a01b1916600160a01b60ff87160217845590506107208161071a61076d565b9061121e565b600184018190556040805160ff871681526020810192909252805187927faf27998ec15e9d3809edad41aec1b5551d8412e71bd07c91611a0237ead1dc8e92908290030190a25050505050565b60065460055460009143039082906107859083611278565b600454909150610795908261121e565b9250505090565b60015460ff16156107e7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001600160a01b038616610842576040805162461bcd60e51b815260206004820181905260248201527f6f776e65722063616e6e6f7420626520746865207a65726f2061646472657373604482015290519081900360640190fd5b60ff83161580159061085957508360ff168360ff16105b6108a1576040805162461bcd60e51b81526020600482015260146024820152730d2dcecc2d8d2c840c4eac6d6cae840c8cae0e8d60631b604482015290519081900360640190fd5b60408051336020808301919091528183018590528251808303840181526060909201835281519181019190912060008181526002909252919020546001600160a01b03161561092e576040805162461bcd60e51b8152602060048201526014602482015273626174636820616c72656164792065786973747360601b604482015290519081900360640190fd5b600061094087600160ff89161b611278565b600354604080516323b872dd60e01b81523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b15801561099d57600080fd5b505af11580156109b1573d6000803e3d6000fd5b505050506040513d60208110156109c757600080fd5b5051610a0c576040805162461bcd60e51b815260206004820152600f60248201526e3330b4b632b2103a3930b739b332b960891b604482015290519081900360640190fd5b6000610a1a8861071a61076d565b905060405180608001604052808a6001600160a01b031681526020018860ff1681526020018515158152602001828152506002600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548160ff021916908360ff16021790555060408201518160000160156101000a81548160ff02191690831515021790555060608201518160010155905050827f9b088e2c89b322a3c1d81515e1c88db3d386d022926f0e2d0b9b5813b7413d5883838c8b8b8a60405180878152602001868152602001856001600160a01b031681526020018460ff1681526020018360ff1681526020018215158152602001965050505050505060405180910390a2505050505050505050565b60015460ff1690565b610b887f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610ca6565b610bc35760405162461bcd60e51b81526004018080602001828103825260228152602001806118176022913960400191505060405180910390fd5b610bcb6112d1565b565b6000828152602081905260408120610be5908361136e565b90505b92915050565b610c187fdd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d833610ca6565b610c535760405162461bcd60e51b81526004018080602001828103825260238152602001806117a16023913960400191505060405180910390fd5b60055415610c6757610c6361076d565b6004555b6005819055436006556040805182815290517fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a9181900360200190a150565b6000828152602081905260408120610be5908361137a565b600081565b60045481565b60015460ff1615610d14576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600082815260026020526040902080546001600160a01b0316610d75576040805162461bcd60e51b815260206004820152601460248201527318985d18da08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b610d7d61076d565b816001015411610dcc576040805162461bcd60e51b815260206004820152601560248201527418985d18da08185b1c9958591e48195e1c1a5c9959605a1b604482015290519081900360640190fd5b8054600090610dea9084906001600160a01b90910460ff161b611278565b600354604080516323b872dd60e01b81523360048201523060248201526044810184905290519293506001600160a01b03909116916323b872dd916064808201926020929091908290030181600087803b158015610e4757600080fd5b505af1158015610e5b573d6000803e3d6000fd5b505050506040513d6020811015610e7157600080fd5b5051610eb6576040805162461bcd60e51b815260206004820152600f60248201526e3330b4b632b2103a3930b739b332b960891b604482015290519081900360640190fd5b6001820154610ec5908461121e565b60018301819055604080518381526020810192909252805186927faf5756c62d6c0722ef9be1f82bef97ab06ea5aea7f3eb8ad348422079f01d88d92908290030190a250505050565b7fdd24a0f121e5ab7c3e97c63eaaf859e0b46792c3e0edfd86e2b3ad50f63011d881565b600260205260009081526040902080546001909101546001600160a01b0382169160ff600160a01b8204811692600160a81b909204169084565b6000818152602081905260408120610be89061138f565b600082815260208190526040902060020154610fa19061045e611106565b6105035760405162461bcd60e51b81526004018080602001828103825260308152602001806117506030913960400191505060405180910390fd5b600081815260026020526040812080546001600160a01b031661103d576040805162461bcd60e51b815260206004820152601460248201527318985d18da08191bd95cc81b9bdd08195e1a5cdd60621b604482015290519081900360640190fd5b61105361104861076d565b60018301549061139a565b9392505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6110a87f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33610ca6565b6110e35760405162461bcd60e51b81526004018080602001828103825260248152602001806117c46024913960400191505060405180910390fd5b610bcb6113dc565b60065481565b6000610be5836001600160a01b03841661145d565b3390565b600082815260208190526040902061112290826110f1565b156104a85761112f611106565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600082815260208190526040902061118b90826114a7565b156104a857611198611106565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000610be583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114bc565b600082820183811015610be5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008261128757506000610be8565b8282028284828161129457fe5b0414610be55760405162461bcd60e51b81526004018080602001828103825260218152602001806117806021913960400191505060405180910390fd5b60015460ff161561131c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611351611106565b604080516001600160a01b039092168252519081900360200190a1565b6000610be5838361155e565b6000610be5836001600160a01b0384166115c2565b6000610be8826115da565b6000610be583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115de565b60015460ff1661142a576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611351611106565b600061146983836115c2565b61149f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610be8565b506000610be8565b6000610be5836001600160a01b038416611638565b600081836115485760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561150d5781810151838201526020016114f5565b50505050905090810190601f16801561153a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161155457fe5b0495945050505050565b815460009082106115a05760405162461bcd60e51b81526004018080602001828103825260228152602001806116ff6022913960400191505060405180910390fd5b8260000182815481106115af57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600081848411156116305760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561150d5781810151838201526020016114f5565b505050900390565b600081815260018301602052604081205480156116f4578354600019808301919081019060009087908390811061166b57fe5b906000526020600020015490508087600001848154811061168857fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806116b857fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610be8565b6000915050610be856fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f776f6e6c79207072696365206f7261636c652063616e20736574207468652070726963656f6e6c79207061757365722063616e20756e70617573652074686520636f6e7472616374416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c666f6e6c79207061757365722063616e2070617573652074686520636f6e7472616374a26469706673582212209bdcb1bc715dd19e6b2fea82c19ad2ddd9c01211ed2aab02fdbc6bc3871b18ca64736f6c63430007060033 \ No newline at end of file diff --git a/contracts/PriceOracle.bytecode b/contracts/PriceOracle.bytecode new file mode 100644 index 0000000..61a1223 --- /dev/null +++ b/contracts/PriceOracle.bytecode @@ -0,0 +1 @@ +0x608060405234801561001057600080fd5b506040516104b83803806104b883398101604081905261002f9161007e565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001919091556002556100a1565b60008060408385031215610090578182fd5b505080516020909101519092909150565b610408806100b06000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c806398d5fdca1161005b57806398d5fdca146100dd578063a035b1fe146100f8578063dd4899321461010f578063f2fde38b1461011857600080fd5b8063710f2dd11461008d578063715018a6146100a25780638d6cc56d146100aa5780638da5cb5b146100bd575b600080fd5b6100a061009b366004610385565b61012b565b005b6100a061019a565b6100a06100b8366004610385565b61020e565b6000546040516001600160a01b0390911681526020015b60405180910390f35b600154600254604080519283526020830191909152016100d4565b61010160015481565b6040519081526020016100d4565b61010160025481565b6100a0610126366004610357565b61026d565b6000546001600160a01b0316331461015e5760405162461bcd60e51b81526004016101559061039d565b60405180910390fd5b60028190556040518181527f0f45948e42a1e34f851df8452200e744563dae2029a99b8178ff6530458bd3df906020015b60405180910390a150565b6000546001600160a01b031633146101c45760405162461bcd60e51b81526004016101559061039d565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102385760405162461bcd60e51b81526004016101559061039d565b60018190556040518181527fae46785019700e30375a5d7b4f91e32f8060ef085111f896ebf889450aa2ab5a9060200161018f565b6000546001600160a01b031633146102975760405162461bcd60e51b81526004016101559061039d565b6001600160a01b0381166102fc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610155565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600060208284031215610368578081fd5b81356001600160a01b038116811461037e578182fd5b9392505050565b600060208284031215610396578081fd5b5035919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260408201526060019056fea264697066735822122069737c178b79be7973d71a433150ff2571d211a983a7f5a5ba0f7dba3d57fd7664736f6c63430008040033 \ No newline at end of file diff --git a/migrations/1_initial.js b/migrations/1_initial.js index 7bb1a07..421ffe2 100644 --- a/migrations/1_initial.js +++ b/migrations/1_initial.js @@ -7,6 +7,10 @@ function prefixedAddressParamToByteCode(address) { return address.substring(2).toLowerCase().padStart(64, '0') } +function intToByteCode(intParam) { + return Number(intParam).toString(16).padStart(64, '0') +} + function getSimpleSwapFactoryBin(tokenAddress) { const binPath = Path.join(__dirname, '..', 'contracts', 'SimpleSwapFactory.bytecode') const bin = FS.readFileSync(binPath, 'utf8').toString() @@ -23,6 +27,15 @@ function getPostageStampBin(tokenAddress) { return bin + tokenAddress } +function getPriceOracleBin(price, chequeValueDeduction) { + const binPath = Path.join(__dirname, '..', 'contracts', 'PriceOracle.bytecode') + const bin = FS.readFileSync(binPath, 'utf8').toString() + const priceAbi = intToByteCode(price) + const chequeValueAbi = intToByteCode(chequeValueDeduction) + //add tokenaddress for param to the end of the bytecode + return bin + priceAbi + chequeValueAbi +} + /** Returns back contract hash */ async function createContract(contractName, data, creatorAccount) { const transaction = await web3.eth.sendTransaction({ @@ -51,9 +64,20 @@ async function createPostageStampContract(erc20ContractAddress, creatorAccount) return createContract('PostageStamp', getPostageStampBin(erc20ContractAddress), creatorAccount) } +/** + * + * @param {number} price current price in PLUR per accounting unit + * @param {number} chequeValueDeduction value deducted from first received cheque from a peer in PLUR + * @param {string} creatorAccount + */ +async function createPriceOracleContract(price, chequeValueDeduction, creatorAccount) { + return createContract('PriceOracle', getPriceOracleBin(price, chequeValueDeduction), creatorAccount) +} + module.exports = function (deployer, network, accounts) { deployer.deploy(ERC20PresetMinterPauser, "Swarm Token", "BZZ").then(async () => { await createSimpleSwapFactoryContract(ERC20PresetMinterPauser.address, accounts[0]) await createPostageStampContract(ERC20PresetMinterPauser.address, accounts[0]) + await createPriceOracleContract(100000, 1, accounts[0]) }); }; diff --git a/package-lock.json b/package-lock.json index 983b2ba..61df81e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "version": "0.0.1", "license": "BSD-3-Clause", "dependencies": { - "@ethersphere/bee-js": "github:ethersphere/bee-js#bee-0.6.0", + "@ethersphere/bee-js": "0.12.0", "@openzeppelin/contracts": "^3.1.0", "axios": "^0.20.0", "truffle": "^5.3.5" @@ -1038,20 +1038,19 @@ } }, "node_modules/@ethersphere/bee-js": { - "version": "0.8.1", - "resolved": "git+ssh://git@github.com/ethersphere/bee-js.git#94836afaebae98728a8136365a7e2fe7e9bc9526", - "license": "BSD-3-Clause", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-0.12.0.tgz", + "integrity": "sha512-fpZjbjIU5pxuGGo6nvVyAkEvCNSYIuoUb5fyaaIyZ+czswEkVm5oPeEfNvF703EWnar6kcAjCpAOs+dLWwLKAg==", "dependencies": { "axios": "^0.21.1", "elliptic": "^6.5.4", "isomorphic-ws": "^4.0.1", "js-sha3": "^0.8.0", - "json-bigint": "^1.0.0", "tar-js": "^0.3.0", "ws": "^7.4.4" }, "engines": { - "bee": "0.6.0-17f7837-dirty", + "bee": "1.0.0-3a92ef5-dirty", "node": ">=12.0.0", "npm": ">=6.0.0" } @@ -5862,6 +5861,7 @@ "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", + "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -7281,7 +7281,8 @@ "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1" + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "bin": { "escodegen": "bin/escodegen.js", @@ -7341,6 +7342,9 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dependencies": { + "graceful-fs": "^4.1.6" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -9015,6 +9019,7 @@ "dom-serializer": "~0.1.0", "entities": "~1.1.1", "htmlparser2": "~3.8.1", + "jsdom": "^7.0.2", "lodash": "^4.1.0" }, "engines": { @@ -10176,14 +10181,6 @@ "node": ">=4" } }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", @@ -10275,6 +10272,7 @@ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "optional": true, "dependencies": { + "graceful-fs": "^4.1.6", "universalify": "^2.0.0" }, "optionalDependencies": { @@ -15747,6 +15745,9 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dependencies": { + "graceful-fs": "^4.1.6" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -16086,7 +16087,12 @@ "integrity": "sha512-qdvaZzKc5WxnWS6qW7hpAo4aAphAtQfJYnr2hv7FftbycgOv7lemtIPxcd91+/3eZAIGM6hmCjbFYXgEyyaIkQ==", "hasInstallScript": true, "dependencies": { + "@truffle/db": "^0.5.11", "@truffle/debugger": "^8.0.25", + "@truffle/preserve-fs": "^0.2.2", + "@truffle/preserve-to-buckets": "^0.2.2", + "@truffle/preserve-to-filecoin": "^0.2.2", + "@truffle/preserve-to-ipfs": "^0.2.2", "app-module-path": "^2.2.0", "mocha": "8.1.2", "original-require": "^1.0.1" @@ -16679,6 +16685,7 @@ "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", "optional": true, "dependencies": { + "@zxing/text-encoding": "0.9.0", "util": "^0.12.3" }, "optionalDependencies": { @@ -18571,14 +18578,14 @@ } }, "@ethersphere/bee-js": { - "version": "git+ssh://git@github.com/ethersphere/bee-js.git#94836afaebae98728a8136365a7e2fe7e9bc9526", - "from": "@ethersphere/bee-js@github:ethersphere/bee-js#bee-0.6.0", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@ethersphere/bee-js/-/bee-js-0.12.0.tgz", + "integrity": "sha512-fpZjbjIU5pxuGGo6nvVyAkEvCNSYIuoUb5fyaaIyZ+czswEkVm5oPeEfNvF703EWnar6kcAjCpAOs+dLWwLKAg==", "requires": { "axios": "^0.21.1", "elliptic": "^6.5.4", "isomorphic-ws": "^4.0.1", "js-sha3": "^0.8.0", - "json-bigint": "^1.0.0", "tar-js": "^0.3.0", "ws": "^7.4.4" }, @@ -22376,6 +22383,7 @@ "integrity": "sha512-FeXxO37BLV5JRvxPmVFB91zRHalavV8H4TdQGt1/hz0AkoPymIV68OkuB+TptpjeYgatcgKPoPvPhglJkTzFQQ==", "optional": true, "requires": { + "bitcore-lib": "^8.25.10", "unorm": "^1.4.1" } }, @@ -26496,14 +26504,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "optional": true }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", diff --git a/package.json b/package.json index f00d496..63d8f26 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "gen:traffic": "node ./scripts/gen-traffic.js" }, "dependencies": { - "@ethersphere/bee-js": "0.10.0", + "@ethersphere/bee-js": "0.12.0", "@openzeppelin/contracts": "^3.1.0", "axios": "^0.20.0", "truffle": "^5.3.5" diff --git a/scripts/.env b/scripts/.env index 87a7219..ec00728 100755 --- a/scripts/.env +++ b/scripts/.env @@ -1,5 +1,6 @@ -BEE_VERSION="0.6.0" -BLOCKCHAIN_VERSION="1.1.1" +BEE_VERSION="1.0.0" +BLOCKCHAIN_VERSION="1.2.0" BEE_ENV_PREFIX="swarm-test" BEE_IMAGE_PREFIX="docker.pkg.github.com/ethersphere/bee-factory" COMMIT_VERSION_TAG="false" +STATE_COMMIT="false" diff --git a/scripts/bee-docker-build.sh b/scripts/bee-docker-build.sh index f82f153..f631660 100755 --- a/scripts/bee-docker-build.sh +++ b/scripts/bee-docker-build.sh @@ -20,6 +20,7 @@ MY_PATH=$( cd "$MY_PATH" && pwd ) BEE_DIRS=$(ls -d "$MY_PATH"/bee-data-dirs/*/) BEE_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BEE_VERSION) BEE_IMAGE_PREFIX=$("$MY_PATH/utils/env-variable-value.sh" BEE_IMAGE_PREFIX) +STATE_COMMIT=$("$MY_PATH/utils/env-variable-value.sh" STATE_COMMIT) OFFICIAL_BEE_IMAGE="ethersphere/bee:$BEE_VERSION" # Make sure we the user has permission all the files @@ -30,20 +31,33 @@ sudo chmod 777 -R "$MY_PATH/bee-data-dirs" echo "Update common dockerfile" dockerfile "$MY_PATH/bee-data-dirs/Dockerfile" "$BEE_VERSION" +### BEE_VERSION ALTERNATIONS START + # If the user has been set the COMMIT_VERSION_TAG env variable # The image will be built with the tag that is the bee version string COMMIT_VERSION_TAG="$("$MY_PATH/utils/env-variable-value.sh" COMMIT_VERSION_TAG)" if [ "$COMMIT_VERSION_TAG" == "true" ] ; then + echo "Image version tag will be extracted from the bee version command..." docker pull $OFFICIAL_BEE_IMAGE # somehow the version command's output goes to the stderr BEE_VERSION=$(docker run --rm $OFFICIAL_BEE_IMAGE version 2>&1) + echo "Extracted Bee version: $BEE_VERSION" "$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION" fi +if [ "$STATE_COMMIT" == 'true' ] ; then + echo "The bee image will be built with their state" + BEE_VERSION+="-stateful" + "$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION" + echo "Stateful Bee version: $BEE_VERSION" +fi + +### BEE_VERSION ALERNATIONS END + echo "Build Dockerfiles" for BEE_DIR in $BEE_DIRS do - echo "$BEE_DIR" + echo "Build Bee version $BEE_VERSION on $BEE_DIR" dockerbuild "$BEE_DIR" "$MY_PATH/bee-data-dirs/Dockerfile" "$BEE_VERSION" "$BEE_IMAGE_PREFIX" done diff --git a/scripts/bee.sh b/scripts/bee.sh index c4e308a..75c6fe0 100755 --- a/scripts/bee.sh +++ b/scripts/bee.sh @@ -21,7 +21,6 @@ PARAMETERS: --own-image If passed, the used Docker image names will be identical as the name of the workers. --version=x.y.z used version of Bee client. --detach It will not log the output of Queen node at the end of the process. - --payment-threshold The threshold in BZZ where you expect to get paid from your peers. (without decimals, default: 310000000000) USAGE exit 1 } @@ -107,8 +106,8 @@ PORT_MAPS=2 SWAP=true SWAP_FACTORY_ADDRESS="0x5b1869D9A4C187F2EAa108f3062412ecf0526b24" POSTAGE_STAMP_ADDRESS="0xCfEB869F69431e42cdB54A4F4f105C19C080A601" +PRICE_ORACLE_ADDRESS="0x254dffcd3277C0b1660F6d42EFbB754edaBAbC2B" INIT_ROOT_DATA_DIR="$MY_PATH/bee-data-dirs" -PAYMENT_THRESHOLD="310000000000" # Decide script action case "$1" in @@ -148,10 +147,6 @@ do PORT_MAPS="${1#*=}" shift 1 ;; - --payment-treshold=*) - PAYMENT_THRESHOLD="${1#*=}" - shift 1 - ;; --own-image) OWN_IMAGE=true shift 1 @@ -197,6 +192,7 @@ if [ -z "$QUEEN_CONTAINER_IN_DOCKER" ] || $EPHEMERAL ; then $EXTRA_QUEEN_PARAMS \ $DOCKER_IMAGE \ start \ + --warmup-time=0 \ --password "$BEE_PASSWORD" \ --bootnode="$QUEEN_BOOTNODE" \ --debug-api-enable \ @@ -204,8 +200,8 @@ if [ -z "$QUEEN_CONTAINER_IN_DOCKER" ] || $EPHEMERAL ; then --swap-enable=$SWAP \ --swap-endpoint="http://$SWARM_BLOCKCHAIN_NAME:9545" \ --swap-factory-address=$SWAP_FACTORY_ADDRESS \ - --payment-threshold="$PAYMENT_THRESHOLD" \ --postage-stamp-address=$POSTAGE_STAMP_ADDRESS \ + --price-oracle-address=$PRICE_ORACLE_ADDRESS \ --network-id 4020 \ --full-node=true \ --welcome-message="You have found the queen of the beehive..." \ @@ -246,14 +242,15 @@ for i in $(seq 1 1 "$WORKERS"); do $EXTRA_WORKER_PARAMS \ $DOCKER_IMAGE \ start \ + --warmup-time=0 \ --password "$BEE_PASSWORD" \ --bootnode="$QUEEN_UNDERLAY_ADDRESS" \ --debug-api-enable \ --swap-enable=$SWAP \ --swap-endpoint="http://$SWARM_BLOCKCHAIN_NAME:9545" \ --swap-factory-address=$SWAP_FACTORY_ADDRESS \ - --payment-threshold="$PAYMENT_THRESHOLD" \ --postage-stamp-address=$POSTAGE_STAMP_ADDRESS \ + --price-oracle-address=$PRICE_ORACLE_ADDRESS \ --network-id 4020 \ --full-node=true \ --welcome-message="I'm just Bee worker ${i} in the beehive." \ diff --git a/scripts/blockchain-docker-build.sh b/scripts/blockchain-docker-build.sh index 9e924df..e291879 100755 --- a/scripts/blockchain-docker-build.sh +++ b/scripts/blockchain-docker-build.sh @@ -5,6 +5,14 @@ MY_PATH=$( cd "$MY_PATH" && pwd ) BEE_ENV_PREFIX=$("$MY_PATH/utils/env-variable-value.sh" BEE_ENV_PREFIX) BEE_IMAGE_PREFIX=$("$MY_PATH/utils/env-variable-value.sh" BEE_IMAGE_PREFIX) BLOCKCHAIN_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BLOCKCHAIN_VERSION) +STATE_COMMIT=$("$MY_PATH/utils/env-variable-value.sh" STATE_COMMIT) + +if [ "$STATE_COMMIT" == 'true' ] ; then + export COMMIT_VERSION_TAG='true' + BEE_VERSION=$("$MY_PATH/utils/build-image-tag.sh" get) + BLOCKCHAIN_VERSION+="-for-$BEE_VERSION" + echo "Blockchain will have image version: $BLOCKCHAIN_VERSION" +fi NAME="$BEE_ENV_PREFIX-blockchain" diff --git a/scripts/build-environment.sh b/scripts/build-environment.sh index 289498f..7cafa78 100755 --- a/scripts/build-environment.sh +++ b/scripts/build-environment.sh @@ -1,10 +1,120 @@ #!/bin/bash +usage() { + cat << USAGE >&2 +USAGE: + $ build-environment.sh [PARAMETERS] +PARAMETERS: + --build-base-bee The base bee image will be built from source code + --base-bee-commit-hash=string the source code commit hash of the base bee; Default: HEAD; Dependency: --build-base-bee + --gen-traffic Generate traffic before bee image commit. + --gen-traffic-upload-node=string The traffic will be generated on the node under the given API URL. Default: http://locahost:1633; Dependency: --gen-traffic + --gen-traffic-checker-node=string The incoming cheques will be checked on the node under the given Debug API URL. Default: http://localhost:11635; Dependency: --gen-traffic + --cheques-count=number this amount of cheques is intended to be generated by the traffic gen. Default: 1; Dependency: --gen-traffic +USAGE + exit 1 +} + +echoerr() { + >&2 echo "$@" +} + +build_bee() { + # Clone source code + BEE_SOURCE_PATH=$MY_PATH/../bee + if [ -d "$BEE_SOURCE_PATH" ] ; then + rm -rf "$BEE_SOURCE_PATH" + fi + mkdir "$BEE_SOURCE_PATH" && cd "$BEE_SOURCE_PATH" || exit 1 + git init + git remote add origin https://github.com/ethersphere/bee.git + git fetch origin --depth=1 "$COMMIT_HASH" + git reset --hard FETCH_HEAD + # Build bee and make docker image + export BEE_VERSION=${COMMIT_HASH::7}-commit + make binary + echo "Bee image will be built with version: $BEE_VERSION" + docker build . -t ethersphere/bee:$BEE_VERSION + cd "$MY_PATH" || exit 1 + # Set build image tag so that other terminal session can retrieve + "$MY_PATH/utils/build-image-tag.sh" set "$BEE_VERSION" +} + +# the image label for the produced bee images in case of state commitment +stateful_image_label() { + echo "$BEE_VERSION-stateful" +} + MY_PATH=$(dirname "$0") MY_PATH=$( cd "$MY_PATH" && pwd ) +COMMIT_HASH=HEAD +BUILD_BASE_BEE=false +GEN_TRAFFIC=false +GEN_TRAFFIC_UPLOAD_NODE="http://localhost:1633" +GEN_TRAFFIC_CHECKER_NODE="http://localhost:11635" +CHEQUES_COUNT=1 +# Bee version here means the base bee version on which the images will be built +BEE_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BEE_VERSION) +SUPPORTED_WORKER_N=4 +# handle passed options +while [ $# -gt 0 ] +do + case "$1" in + --build-base-bee) + BUILD_BASE_BEE=true + shift 1 + ;; + --base-bee-commit-hash=*) + COMMIT_HASH="${1#*=}" + shift 1 + ;; + --gen-traffic) + GEN_TRAFFIC=true + shift 1 + ;; + --cheques-count=*) + CHEQUES_COUNT=${1#*=} + shift 1 + ;; + --gen-traffic-upload-node=*) + GEN_TRAFFIC_UPLOAD_NODE="${1#*=}" + shift 1 + ;; + --gen-traffic-checker-node=*) + GEN_TRAFFIC_CHECKER_NODE="${1#*=}" + shift 1 + ;; + *) + echoerr "Unknown argument: $1" + usage + ;; + esac +done + +# cleanup for start from an empty state +"$MY_PATH/bee-cleanup.sh" + +if $BUILD_BASE_BEE ; then + build_bee +fi "$MY_PATH/network.sh" "$MY_PATH/blockchain.sh" npm run migrate:contracts npm run supply -"$MY_PATH/blockchain-docker-build.sh" +if $GEN_TRAFFIC ; then + export STATE_COMMIT='true' + echo "Bee image with special state will be commited... traffic generation is on." + # give the permission to the bee user + BEE_DIR_PATH="$MY_PATH/bee-data-dirs/" + sudo chown 999:999 -R "$BEE_DIR_PATH" + echo "Start Bee nodes so that traffic can be generated and commited to the images" + "$MY_PATH/bee.sh" start --workers=$SUPPORTED_WORKER_N --detach + echo "Generating traffic on Bee node $GEN_TRAFFIC_UPLOAD_NODE" + echo "Run traffic generation until $CHEQUES_COUNT incoming cheques will arrive to node under Debug API $GEN_TRAFFIC_CHECKER_NODE" + npm run gen:traffic -- "$CHEQUES_COUNT" "$GEN_TRAFFIC_UPLOAD_NODE;$GEN_TRAFFIC_CHECKER_NODE" + echo "traffic has been generated, stop nodes before commit..." + "$MY_PATH/bee.sh" stop + docker container prune -f +fi "$MY_PATH/bee-docker-build.sh" +"$MY_PATH/blockchain-docker-build.sh" diff --git a/scripts/environment.sh b/scripts/environment.sh index 5aacf8d..26f0125 100755 --- a/scripts/environment.sh +++ b/scripts/environment.sh @@ -10,7 +10,6 @@ PARAMETERS: --ephemeral create ephemeral container for bee-client. Data won't be persisted. --workers=number all Bee nodes in the test environment. Default is 4. --detach It will not log the output of Queen node at the end of the process. - --payment-treshold excess debt above payment threshold in BZZ where you disconnect from your peer (without decimals, default: 310000000000) --port-maps=number map ports of the cluster nodes to the hosting machine in the following manner: 1. 1633:1635 2. 11633:11635 @@ -44,7 +43,6 @@ WORKERS=4 LOG=true SWARM_BLOCKCHAIN_NAME="$BEE_ENV_PREFIX-blockchain" SWARM_NETWORK="$BEE_ENV_PREFIX-network" -PAYMENT_THRESHOLD="310000000000" PORT_MAPS=2 # Decide script action @@ -74,10 +72,6 @@ do WORKERS=${1#*=} shift 1 ;; - --payment-treshold=*) - PAYMENT_THRESHOLD=${1#*=} - shift 1 - ;; --port-maps=*) PORT_MAPS="${1#*=}" shift 1 @@ -116,7 +110,7 @@ fi sleep 5 # Build up bee.sh parameters -BEE_SH_ARGUMENTS="--workers=$WORKERS --own-image --payment-treshold=$PAYMENT_THRESHOLD --port-maps=$PORT_MAPS" +BEE_SH_ARGUMENTS="--workers=$WORKERS --own-image --port-maps=$PORT_MAPS" if $EPHEMERAL ; then BEE_SH_ARGUMENTS="$BEE_SH_ARGUMENTS --ephemeral" fi diff --git a/scripts/gen-traffic.js b/scripts/gen-traffic.js index 8023f8a..d4ed886 100644 --- a/scripts/gen-traffic.js +++ b/scripts/gen-traffic.js @@ -1,9 +1,9 @@ const axios = require('axios').default; const { Bee, BeeDebug } = require('@ethersphere/bee-js'); -const SLEEP_BETWEEN_UPLOADS_MS = 500 -const POSTAGE_STAMPS_AMOUNT = BigInt(10000) -const POSTAGE_STAMPS_DEPTH = 20 +const SLEEP_BETWEEN_UPLOADS_MS = 1000 +const POSTAGE_STAMPS_AMOUNT = '10000' +const POSTAGE_STAMPS_DEPTH = 32 /** * Lehmer random number generator with seed (minstd_rand in C++11) @@ -73,15 +73,18 @@ async function genTrafficLoop(hosts, minCheques) { const bee = new Bee(beeApiUrl) const beeDebug = new BeeDebug(beeDebugApiUrl) - console.log(`Generating postage stamps on ${host}...`) + console.log(`Create postage stamp on ${beeApiUrl}...`) const postageBatchId = await bee.createPostageBatch(POSTAGE_STAMPS_AMOUNT, POSTAGE_STAMPS_DEPTH) - console.log(`Generated ${postageBatchId} postage stamp on ${host}...`) + console.log(`Generated ${postageBatchId} postage stamp on ${beeApiUrl}...`) return {bee, beeDebug, postageBatchId} }) const bees = await Promise.all(promises) + console.log(`wait 11 secs (>10 block time) before postage stamp usages`) + await sleep(11*1000) + while(true) { await genTrafficOnOpenPorts(bees) @@ -96,14 +99,13 @@ async function genTrafficLoop(hosts, minCheques) { const lastCashOutPromises = incomingCheques.map(({ peer }) => beeDebug.getLastCashoutAction(peer)) const lastCashOuts = await Promise.all(lastCashOutPromises) for(const [index, lastCashOut] of lastCashOuts.entries()) { - if(lastCashOut.uncashedAmount > 0) { + if(BigInt(lastCashOut.uncashedAmount) > 0) { uncashedCheques.push(incomingCheques[index]) } } beesUncashedCheques.push(uncashedCheques) } - if(beesUncashedCheques.every(uncashedCheques => uncashedCheques.length >= minCheques)) { console.log(`Generated at least ${minCheques} for every node on the given Debug API endpoints`,) break diff --git a/scripts/publish-environment.sh b/scripts/publish-environment.sh index c80e45b..be73930 100755 --- a/scripts/publish-environment.sh +++ b/scripts/publish-environment.sh @@ -2,9 +2,22 @@ MY_PATH=$(dirname "$0") MY_PATH=$( cd "$MY_PATH" && pwd ) -BEE_VERSION=$("$MY_PATH/utils/build-image-tag.sh" get) -BEE_ENV_PREFIX=$("$MY_PATH/utils/env-variable-value.sh" BEE_ENV_PREFIX) +STATE_COMMIT=$("$MY_PATH/utils/env-variable-value.sh" STATE_COMMIT) +BUILD_IMAGE=$("$MY_PATH/utils/env-variable-value.sh" BUILD_IMAGE) BLOCKCHAIN_VERSION=$("$MY_PATH/utils/env-variable-value.sh" BLOCKCHAIN_VERSION) + +if [ $BUILD_IMAGE == 'true' ] || [ $STATE_COMMIT == 'true' ] ; then + # Necessary for fetch BEE_VERSION from .commit-version-tag + export COMMIT_VERSION_TAG='true' +fi + +BEE_VERSION=$("$MY_PATH/utils/build-image-tag.sh" get) + +if [ $STATE_COMMIT == 'true' ] ; then + BLOCKCHAIN_VERSION+="-for-$BEE_VERSION" +fi + +BEE_ENV_PREFIX=$("$MY_PATH/utils/env-variable-value.sh" BEE_ENV_PREFIX) BEE_IMAGE_PREFIX=$("$MY_PATH/utils/env-variable-value.sh" BEE_IMAGE_PREFIX) BLOCKCHAIN_NAME="$BEE_ENV_PREFIX-blockchain" BLOCKCHAIN_IMAGE_NAME="$BEE_IMAGE_PREFIX/$BLOCKCHAIN_NAME:$BLOCKCHAIN_VERSION" diff --git a/smth.txt b/smth.txt deleted file mode 100644 index 247d975..0000000 Binary files a/smth.txt and /dev/null differ