NetStake changes

This commit is contained in:
sascha3333 committed 2025-09-15 20:34:01 +02:00
1 parent 8e0b6a58bd
commit 71f7d498b2
2 files changed
+82 -15

No files matched your search

@@ -1133,7 +1133,7 @@
"outputs": [ "outputs": [
{ {
"internalType": "uint256", "internalType": "uint256",
"name": "netStake", "name": "bigStake",
"type": "uint256" "type": "uint256"
}, },
{ {
@@ -1143,7 +1143,12 @@
}, },
{ {
"internalType": "uint256", "internalType": "uint256",
"name": "totalOriginalStake", "name": "netStake",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "originalStake",
"type": "uint256" "type": "uint256"
} }
], ],
@@ -1472,6 +1477,19 @@
"stateMutability": "view", "stateMutability": "view",
"type": "function" "type": "function"
}, },
{
"inputs": [],
"name": "maxUnlockPercentage",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{ {
"inputs": [ "inputs": [
{ {
@@ -1841,6 +1859,19 @@
"stateMutability": "nonpayable", "stateMutability": "nonpayable",
"type": "function" "type": "function"
}, },
{
"inputs": [
{
"internalType": "uint256",
"name": "_maxPercentage",
"type": "uint256"
}
],
"name": "updateMaxUnlockPercentage",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{ {
"inputs": [ "inputs": [
{ {
@@ -1910,6 +1941,25 @@
"stateMutability": "view", "stateMutability": "view",
"type": "function" "type": "function"
}, },
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "userOriginalStake",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{ {
"inputs": [ "inputs": [
{ {
@@ -2101,8 +2151,8 @@
"type": "function" "type": "function"
} }
], ],
"bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615f7880620000e66000396000f3fe608060405234801561001057600080fd5b50600436106104325760003560e01c80637e6d992611610236578063bed9757e1161013b578063d532bdfe116100c3578063ef5d9ae811610087578063ef5d9ae814610c26578063f109208f14610c46578063f2bb563014610c59578063fe2f50d014610c6c578063ffecf51614610c7557600080fd5b8063d532bdfe14610bc4578063da1b436414610bd7578063e88f8e6614610bf7578063eacdc5ff14610c0a578063eb44e0a314610c1357600080fd5b8063c7b530b01161010a578063c7b530b014610b22578063cc573a9114610b42578063ce13d09014610b7e578063ce3432c314610b91578063cfcf331914610bb157600080fd5b8063bed9757e14610a5b578063c267660314610a7c578063c32d3ae214610a84578063c6b61e4c14610ab257600080fd5b80639cb6f556116101be578063ac97b4171161018d578063ac97b4171461098d578063b6c3dc4c146109a0578063b92a349f146109c0578063bc0bc6ba146109d3578063bd84477d146109f357600080fd5b80639cb6f556146108fb5780639f3a676c1461090e578063a0d467581461095a578063aaf4b04d1461097a57600080fd5b80638851ec0f116102055780638851ec0f146108825780638f82818f146108955780639437e32e146108b5578063953d16bf146108c857806396fd111a146108db57600080fd5b80637e6d99261461082b57806380ca0ecf146108545780638129fc1c14610867578063853e0df21461086f57600080fd5b806343a32f891161033c57806361d1080b116102c45780637065cb48116102935780637065cb48146107b257806374d1c8e3146107c557806375060a0b146107d85780637a0c6dc0146107f85780637bc221ac1461081857600080fd5b806361d1080b1461077757806362cd6a091461077f57806367a74ddc146107965780636ef569a5146107a957600080fd5b806351e624721161030b57806351e62472146106f657806351f6cf2f14610709578063549e61d3146107315780635811622714610744578063592d1dd11461075757600080fd5b806343a32f891461061657806343c7c01114610691578063441a4175146106a45780634a61f1e5146106d657600080fd5b8063173825d9116103bf5780632ded58aa1161038e5780632ded58aa1461058c5780632e46fed8146105955780633ba8396e146105be5780633c92f98d146105e15780633f35e7221461060357600080fd5b8063173825d9146105405780631764303d146105535780631aefa2d1146105665780631eb9e53e1461057957600080fd5b8063092c761011610406578063092c7610146104da5780630a84096a146104fa5780630a910a6d1461050d5780630c7d63861461051657806313baee5b1461052057600080fd5b8062159da614610437578063013745181461045d578063022914a71461049e5780630519da32146104d1575b600080fd5b61044a610445366004615681565b610c88565b6040519081526020015b60405180910390f35b61048661046b366004615681565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610454565b6104c16104ac366004615681565b60006020819052908152604090205460ff1681565b6040519015158152602001610454565b61044a60075481565b61044a6104e8366004615681565b60066020526000908152604090205481565b61044a6105083660046156a3565b610d1e565b61044a60115481565b61051e610e56565b005b61044a61052e366004615681565b600c6020526000908152604090205481565b61051e61054e366004615681565b611055565b61051e610561366004615711565b611146565b61051e610574366004615752565b6113b1565b61044a610587366004615681565b6113e5565b61044a60105481565b61044a6105a3366004615681565b6001600160a01b03166000908152601a602052604090205490565b6104c16105cc366004615681565b60016020526000908152604090205460ff1681565b6105f46105ef366004615711565b611452565b604051610454939291906157a6565b61051e6106113660046156a3565b611640565b6106626106243660046156a3565b60126020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610454949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b61051e61069f366004615681565b6116c7565b6106b76106b2366004615752565b611a50565b604080516001600160a01b039093168352602083019190915201610454565b61044a6106e4366004615681565b60166020526000908152604090205481565b61051e610704366004615752565b611a88565b61071c6107173660046156a3565b611abc565b60408051928352602083019190915201610454565b61051e61073f3660046157dc565b611af8565b61051e610752366004615847565b611dc1565b61044a610765366004615681565b60056020526000908152604090205481565b60195461044a565b610787612098565b60405161045493929190615869565b61051e6107a4366004615932565b6122eb565b61044a60145481565b61051e6107c0366004615681565b612348565b61051e6107d3366004615965565b61241a565b61044a6107e6366004615681565b600a6020526000908152604090205481565b61080b610806366004615681565b6125fd565b60405161045491906159d0565b61044a610826366004615681565b6126e4565b61044a610839366004615681565b6001600160a01b031660009081526015602052604090205490565b61044a6108623660046156a3565b6128c7565b61051e6129d3565b61051e61087d366004615752565b612bf8565b61051e610890366004615a7e565b612c94565b61044a6108a3366004615681565b60156020526000908152604090205481565b61051e6108c3366004615aaa565b612dd5565b61051e6108d6366004615752Line truncated "bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b615df580620000e66000396000f3fe608060405234801561001057600080fd5b50600436106103635760003560e01c8062159da614610368578063013745181461038e578063022914a7146103c45780630519da32146103f7578063092c7610146104005780630a84096a146104205780630a910a6d146104335780630c7d63861461043c57806313baee5b14610446578063173825d9146104665780631764303d146104795780631aefa2d11461048c5780631eb9e53e1461049f5780632ded58aa146104b25780632e46fed8146104bb5780633ba8396e146104e45780633c92f98d146105075780633f35e7221461052957806343a32f891461053c57806343c7c011146105b7578063441a4175146105ca5780634a61f1e5146105eb57806351e624721461060b57806351f6cf2f1461061e578063549e61d31461063f5780635811622714610652578063592d1dd11461066557806361d1080b1461068557806362cd6a091461068d57806367a74ddc146106a45780636ef569a5146106b75780637065cb48146106c057806374d1c8e3146106d357806375060a0b146106e65780637a0c6dc0146107065780637bc221ac146107265780637e6d99261461073957806380ca0ecf146107625780638129fc1c1461077557806382b756811461077d57806384e8520a14610790578063853e0df2146107b05780638851ec0f146107c35780638939d787146107d65780638f82818f146107df5780639437e32e146107ff578063953d16bf1461081257806396fd111a146108255780639cb6f556146108455780639f3a676c14610858578063a0d46758146108a4578063aaf4b04d146108c4578063ac97b417146108d7578063b6c3dc4c146108ea578063b92a349f1461090a578063bc0bc6ba1461091d578063bd84477d1461093d578063bed9757e146109a5578063c2676603146109c6578063c32d3ae2146109ce578063c6b61e4c14610a01578063c7b530b014610a71578063cc573a9114610a91578063ce13d09014610acd578063ce3432c314610ae0578063cfcf331914610b00578063d532bdfe14610b13578063da1b436414610b26578063e88f8e6614610b46578063eacdc5ff14610b59578063eb44e0a314610b62578063ef5d9ae814610b75578063f109208f14610b95578063f2bb563014610ba8578063fe2f50d014610bbb578063ffecf51614610bc4575b600080fd5b61037b6103763660046153c8565b610bd7565b6040519081526020015b60405180910390f35b6103b761039c3660046153c8565b6004602052600090815260409020546001600160a01b031681565b60405161038591906153ea565b6103e76103d23660046153c8565b60006020819052908152604090205460ff1681565b6040519015158152602001610385565b61037b60075481565b61037b61040e3660046153c8565b60066020526000908152604090205481565b61037b61042e3660046153fe565b610c71565b61037b60125481565b610444610da9565b005b61037b6104543660046153c8565b600c6020526000908152604090205481565b6104446104743660046153c8565b610f6f565b61044461048736600461546c565b611060565b61044461049a3660046154ad565b61129e565b61037b6104ad3660046153c8565b6112d2565b61037b60115481565b61037b6104c93660046153c8565b6001600160a01b03166000908152601c602052604090205490565b6103e76104f23660046153c8565b60016020526000908152604090205460ff1681565b61051a61051536600461546c565b611316565b60405161038593929190615501565b6104446105373660046153fe565b611507565b61058861054a3660046153fe565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610385949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b6104446105c53660046153c8565b61157c565b6105dd6105d83660046154ad565b6118ea565b604051610385929190615537565b61037b6105f93660046153c8565b60186020526000908152604090205481565b6104446106193660046154ad565b611922565b61063161062c3660046153fe565b611956565b604051610385929190615550565b61044461064d36600461555e565b611992565b6104446106603660046155c9565b611c49565b61037b6106733660046153c8565b60056020526000908152604090205481565b601b5461037b565b610695611eb3565b60405161038593929190615617565b6104446106b23660046156b9565b6120da565b61037b60165481565b6104446106ce3660046153c8565b612137565b6104446106e13660046156ec565b612209565b61037b6106f43660046153c8565b600a6020526000908152604090205481565b6107196107143660046153c8565b6123ec565b6040516103859190615757565b61037b6107343660046153c8565b6124d3565b61037b6107473660046153c8565b6001600160a01b031660009081526017602052604090205490565b61037b6107703660046153fe565b6126a7565b6104446127b3565b61044461078b3660046154ad565b6129dc565b61037b61079e3660046153c8565b600d6020526000908152604090205481565b6104446107be3660046154ad565b612a6e565b6104446107d1366004615805565b612aec565b61037b60135481565b61037b6107ed3660046153c8565b60176020526000908152604090205481565b61044461080d366004615831565b612c78565b6104446108203660046154ad565b612cbf565b6108386108333660046155c9565b612fac565b60405161038591906158c3565b6104446108533660046154ad565b61314b565b61086b6108663660046154ad565b6133da565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610385565b6108b76108b23660046153fe565b61342d565b6040516103859190615911565b6104446108d23660046154ad565b6134Line truncated
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104325760003560e01c80637e6d992611610236578063bed9757e1161013b578063d532bdfe116100c3578063ef5d9ae811610087578063ef5d9ae814610c26578063f109208f14610c46578063f2bb563014610c59578063fe2f50d014610c6c578063ffecf51614610c7557600080fd5b8063d532bdfe14610bc4578063da1b436414610bd7578063e88f8e6614610bf7578063eacdc5ff14610c0a578063eb44e0a314610c1357600080fd5b8063c7b530b01161010a578063c7b530b014610b22578063cc573a9114610b42578063ce13d09014610b7e578063ce3432c314610b91578063cfcf331914610bb157600080fd5b8063bed9757e14610a5b578063c267660314610a7c578063c32d3ae214610a84578063c6b61e4c14610ab257600080fd5b80639cb6f556116101be578063ac97b4171161018d578063ac97b4171461098d578063b6c3dc4c146109a0578063b92a349f146109c0578063bc0bc6ba146109d3578063bd84477d146109f357600080fd5b80639cb6f556146108fb5780639f3a676c1461090e578063a0d467581461095a578063aaf4b04d1461097a57600080fd5b80638851ec0f116102055780638851ec0f146108825780638f82818f146108955780639437e32e146108b5578063953d16bf146108c857806396fd111a146108db57600080fd5b80637e6d99261461082b57806380ca0ecf146108545780638129fc1c14610867578063853e0df21461086f57600080fd5b806343a32f891161033c57806361d1080b116102c45780637065cb48116102935780637065cb48146107b257806374d1c8e3146107c557806375060a0b146107d85780637a0c6dc0146107f85780637bc221ac1461081857600080fd5b806361d1080b1461077757806362cd6a091461077f57806367a74ddc146107965780636ef569a5146107a957600080fd5b806351e624721161030b57806351e62472146106f657806351f6cf2f14610709578063549e61d3146107315780635811622714610744578063592d1dd11461075757600080fd5b806343a32f891461061657806343c7c01114610691578063441a4175146106a45780634a61f1e5146106d657600080fd5b8063173825d9116103bf5780632ded58aa1161038e5780632ded58aa1461058c5780632e46fed8146105955780633ba8396e146105be5780633c92f98d146105e15780633f35e7221461060357600080fd5b8063173825d9146105405780631764303d146105535780631aefa2d1146105665780631eb9e53e1461057957600080fd5b8063092c761011610406578063092c7610146104da5780630a84096a146104fa5780630a910a6d1461050d5780630c7d63861461051657806313baee5b1461052057600080fd5b8062159da614610437578063013745181461045d578063022914a71461049e5780630519da32146104d1575b600080fd5b61044a610445366004615681565b610c88565b6040519081526020015b60405180910390f35b61048661046b366004615681565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610454565b6104c16104ac366004615681565b60006020819052908152604090205460ff1681565b6040519015158152602001610454565b61044a60075481565b61044a6104e8366004615681565b60066020526000908152604090205481565b61044a6105083660046156a3565b610d1e565b61044a60115481565b61051e610e56565b005b61044a61052e366004615681565b600c6020526000908152604090205481565b61051e61054e366004615681565b611055565b61051e610561366004615711565b611146565b61051e610574366004615752565b6113b1565b61044a610587366004615681565b6113e5565b61044a60105481565b61044a6105a3366004615681565b6001600160a01b03166000908152601a602052604090205490565b6104c16105cc366004615681565b60016020526000908152604090205460ff1681565b6105f46105ef366004615711565b611452565b604051610454939291906157a6565b61051e6106113660046156a3565b611640565b6106626106243660046156a3565b60126020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610454949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b61051e61069f366004615681565b6116c7565b6106b76106b2366004615752565b611a50565b604080516001600160a01b039093168352602083019190915201610454565b61044a6106e4366004615681565b60166020526000908152604090205481565b61051e610704366004615752565b611a88565b61071c6107173660046156a3565b611abc565b60408051928352602083019190915201610454565b61051e61073f3660046157dc565b611af8565b61051e610752366004615847565b611dc1565b61044a610765366004615681565b60056020526000908152604090205481565b60195461044a565b610787612098565b60405161045493929190615869565b61051e6107a4366004615932565b6122eb565b61044a60145481565b61051e6107c0366004615681565b612348565b61051e6107d3366004615965565b61241a565b61044a6107e6366004615681565b600a6020526000908152604090205481565b61080b610806366004615681565b6125fd565b60405161045491906159d0565b61044a610826366004615681565b6126e4565b61044a610839366004615681565b6001600160a01b031660009081526015602052604090205490565b61044a6108623660046156a3565b6128c7565b61051e6129d3565b61051e61087d366004615752565b612bf8565b61051e610890366004615a7e565b612c94565b61044a6108a3366004615681565b60156020526000908152604090205481565b61051e6108c3366004615aaa565b612dd5565b61051e6108d6366004615752565b612e1c565b6108ee6108e9366004615847565b613122565b6040516104549190615b02565b61051e610909366004615752565b6132f2565b61092161091c366004615752565b6135e3565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610454565b61096d6109683660046156a3565b613636565b6040516104549190615b85565b61051e610988366004615752565b6136c6565b61051e61099b366004615752565b61374c565b6109b36109ae3660046156a3565b613b5a565b604051Line truncated "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103635760003560e01c8062159da614610368578063013745181461038e578063022914a7146103c45780630519da32146103f7578063092c7610146104005780630a84096a146104205780630a910a6d146104335780630c7d63861461043c57806313baee5b14610446578063173825d9146104665780631764303d146104795780631aefa2d11461048c5780631eb9e53e1461049f5780632ded58aa146104b25780632e46fed8146104bb5780633ba8396e146104e45780633c92f98d146105075780633f35e7221461052957806343a32f891461053c57806343c7c011146105b7578063441a4175146105ca5780634a61f1e5146105eb57806351e624721461060b57806351f6cf2f1461061e578063549e61d31461063f5780635811622714610652578063592d1dd11461066557806361d1080b1461068557806362cd6a091461068d57806367a74ddc146106a45780636ef569a5146106b75780637065cb48146106c057806374d1c8e3146106d357806375060a0b146106e65780637a0c6dc0146107065780637bc221ac146107265780637e6d99261461073957806380ca0ecf146107625780638129fc1c1461077557806382b756811461077d57806384e8520a14610790578063853e0df2146107b05780638851ec0f146107c35780638939d787146107d65780638f82818f146107df5780639437e32e146107ff578063953d16bf1461081257806396fd111a146108255780639cb6f556146108455780639f3a676c14610858578063a0d46758146108a4578063aaf4b04d146108c4578063ac97b417146108d7578063b6c3dc4c146108ea578063b92a349f1461090a578063bc0bc6ba1461091d578063bd84477d1461093d578063bed9757e146109a5578063c2676603146109c6578063c32d3ae2146109ce578063c6b61e4c14610a01578063c7b530b014610a71578063cc573a9114610a91578063ce13d09014610acd578063ce3432c314610ae0578063cfcf331914610b00578063d532bdfe14610b13578063da1b436414610b26578063e88f8e6614610b46578063eacdc5ff14610b59578063eb44e0a314610b62578063ef5d9ae814610b75578063f109208f14610b95578063f2bb563014610ba8578063fe2f50d014610bbb578063ffecf51614610bc4575b600080fd5b61037b6103763660046153c8565b610bd7565b6040519081526020015b60405180910390f35b6103b761039c3660046153c8565b6004602052600090815260409020546001600160a01b031681565b60405161038591906153ea565b6103e76103d23660046153c8565b60006020819052908152604090205460ff1681565b6040519015158152602001610385565b61037b60075481565b61037b61040e3660046153c8565b60066020526000908152604090205481565b61037b61042e3660046153fe565b610c71565b61037b60125481565b610444610da9565b005b61037b6104543660046153c8565b600c6020526000908152604090205481565b6104446104743660046153c8565b610f6f565b61044461048736600461546c565b611060565b61044461049a3660046154ad565b61129e565b61037b6104ad3660046153c8565b6112d2565b61037b60115481565b61037b6104c93660046153c8565b6001600160a01b03166000908152601c602052604090205490565b6103e76104f23660046153c8565b60016020526000908152604090205460ff1681565b61051a61051536600461546c565b611316565b60405161038593929190615501565b6104446105373660046153fe565b611507565b61058861054a3660046153fe565b60146020908152600092835260408084209091529082529020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610385949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b6104446105c53660046153c8565b61157c565b6105dd6105d83660046154ad565b6118ea565b604051610385929190615537565b61037b6105f93660046153c8565b60186020526000908152604090205481565b6104446106193660046154ad565b611922565b61063161062c3660046153fe565b611956565b604051610385929190615550565b61044461064d36600461555e565b611992565b6104446106603660046155c9565b611c49565b61037b6106733660046153c8565b60056020526000908152604090205481565b601b5461037b565b610695611eb3565b60405161038593929190615617565b6104446106b23660046156b9565b6120da565b61037b60165481565b6104446106ce3660046153c8565b612137565b6104446106e13660046156ec565b612209565b61037b6106f43660046153c8565b600a6020526000908152604090205481565b6107196107143660046153c8565b6123ec565b6040516103859190615757565b61037b6107343660046153c8565b6124d3565b61037b6107473660046153c8565b6001600160a01b031660009081526017602052604090205490565b61037b6107703660046153fe565b6126a7565b6104446127b3565b61044461078b3660046154ad565b6129dc565b61037b61079e3660046153c8565b600d6020526000908152604090205481565b6104446107be3660046154ad565b612a6e565b6104446107d1366004615805565b612aec565b61037b60135481565b61037b6107ed3660046153c8565b60176020526000908152604090205481565b61044461080d366004615831565b612c78565b6104446108203660046154ad565b612cbf565b6108386108333660046155c9565b612fac565b60405161038591906158c3565b6104446108533660046154ad565b61314b565b61086b6108663660046154ad565b6133da565b6040805196875260208701959095529385019290925260608401526001600160a01b0390811660808401521660a082015260c001610385565b6108b76108b23660046153fe565b61342d565b6040516103859190615911565b6104446108d23660046154ad565b613491565b6104446108e53660046154ad565b613517565b6108fd6108f83660046153fe565b613909565b604051610385919061594b565b610444610918366004615959565b613a1b565b61093061092b3660046154ad565b613be4565b604051610385919061598c565b61095061094b3660046153fe565b613c88565b604080519a8b5260208b0199909952978901969096526060880194909452608087019290925260a086015260c08501526001600160a01b031660e0840152151561010083015261012082015261014001610385565b6109b86109b33660046153fe565b613d06Line truncated
"linkReferences": {}, "linkReferences": {},
"deployedLinkReferences": {} "deployedLinkReferences": {}
} }
+28 -11
View File
@@ -96,11 +96,13 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
// Epoch-based staking variables // Epoch-based staking variables
mapping(uint256 => Epoch) public epochs; mapping(uint256 => Epoch) public epochs;
mapping(address => uint256) public userBigStake; // User's main stake amount mapping(address => uint256) public userBigStake; // User's main stake amount
mapping(address => uint256) public userOriginalStake; // User's original stake amount (never changes)
mapping(address => uint256) public userLastClaimedEpoch; // Last epoch user claimed from mapping(address => uint256) public userLastClaimedEpoch; // Last epoch user claimed from
mapping(address => WithdrawStake[]) public withdrawStakes; // User's withdrawable stakes mapping(address => WithdrawStake[]) public withdrawStakes; // User's withdrawable stakes
uint256 public currentEpochId; uint256 public currentEpochId;
uint256 public totalBigStakes; // Total liability (sum of all user stakes) uint256 public totalBigStakes; // Total liability (sum of all user stakes)
uint256 public instantBuyoutPercent;// Percentage for instant buyout (e.g., 8000 = 80%) uint256 public instantBuyoutPercent;// Percentage for instant buyout (e.g., 8000 = 80%)
uint256 public maxUnlockPercentage; // Maximum unlock percentage per epoch (e.g., 100 = 1%)
// Marketplace variables // Marketplace variables
mapping(address => mapping(uint256 => SellStake)) public sellStakes; // seller => stakeId => SellStake mapping(address => mapping(uint256 => SellStake)) public sellStakes; // seller => stakeId => SellStake
@@ -162,6 +164,7 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
totalBigStakes += 10000 * 1e18; totalBigStakes += 10000 * 1e18;
unlockDelay = 60 * 60 * 36; unlockDelay = 60 * 60 * 36;
maxUnlockPercentage = 100; // 1% maximum unlock per epoch
} }
// Ownership Management // Ownership Management
@@ -187,6 +190,11 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
function updateUnlockDelay(uint256 _delay) external onlyOwner { function updateUnlockDelay(uint256 _delay) external onlyOwner {
unlockDelay = _delay; unlockDelay = _delay;
} }
function updateMaxUnlockPercentage(uint256 _maxPercentage) external onlyOwner {
require(_maxPercentage > 0, "Max percentage must be greater than 0");
maxUnlockPercentage = _maxPercentage;
}
function withdrawFromVestingPool(address _token, uint256 _amount) external onlyOwner { function withdrawFromVestingPool(address _token, uint256 _amount) external onlyOwner {
IERC20(_token).safeTransfer(msg.sender, _amount); IERC20(_token).safeTransfer(msg.sender, _amount);
@@ -338,6 +346,9 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
); );
} }
// Check that unlock percentage doesn't exceed maximum
require(unlockPercentage <= maxUnlockPercentage, "Unlock percentage high");
// Create new epoch entry // Create new epoch entry
epochs[currentEpochId] = Epoch({ epochs[currentEpochId] = Epoch({
estDaysRemaining: estDaysRemaining, estDaysRemaining: estDaysRemaining,
@@ -354,7 +365,7 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
/// @notice Calculate total unclaimed funds for a user across all epochs since last claim /// @notice Calculate total unclaimed funds for a user across all epochs since last claim
function calculateUnclaimedFunds(address user) public view returns (uint256 totalUnclaimed) { function calculateUnclaimedFunds(address user) public view returns (uint256 totalUnclaimed) {
uint256 remainingStake = userBigStake[user]; uint256 remainingStake = getNetStake(user);
uint256 startEpoch = userLastClaimedEpoch[user]; uint256 startEpoch = userLastClaimedEpoch[user];
for (uint256 i = startEpoch; i < currentEpochId; i++) { for (uint256 i = startEpoch; i < currentEpochId; i++) {
@@ -370,23 +381,24 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
/// @notice Get user's net stake (big stake minus unclaimed funds minus pending sell stakes) /// @notice Get user's net stake (big stake minus unclaimed funds minus pending sell stakes)
function getNetStake(address user) public view returns (uint256) { function getNetStake(address user) public view returns (uint256) {
uint256 bigStake = userBigStake[user]; uint256 bigStake = userBigStake[user];
uint256 unclaimed = calculateUnclaimedFunds(user); uint256 committed = pendingSellStakes[user];
uint256 pending = pendingSellStakes[user];
uint256 committed = unclaimed + pending;
return bigStake > committed ? bigStake - committed : 0; return bigStake > committed ? bigStake - committed : 0;
} }
/// @notice Get comprehensive user stake information /// @notice Get comprehensive user stake information
function getUserStakeInfo(address user) external view returns ( function getUserStakeInfo(address user) external view returns (
uint256 netStake, // Current "active" stake amount uint256 bigStake, // Current "active" stake amount
uint256 unclaimedFunds, // Available to claim uint256 unclaimedFunds, // Available to claim
uint256 totalOriginalStake // Original big number (for reference) uint256 netStake, // Available for new actions (minus pending sells)
uint256 originalStake // Original stake amount (never changes)
) { ) {
uint256 unclaimed = calculateUnclaimedFunds(user); uint256 unclaimed = calculateUnclaimedFunds(user);
uint256 net = getNetStake(user);
return ( return (
userBigStake[user] - unclaimed, // Net stake userBigStake[user],
unclaimed, // Unclaimed unclaimed,
userBigStake[user] // Original net,
userOriginalStake[user]
); );
} }
@@ -505,6 +517,11 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
// Update total stakes accounting // Update total stakes accounting
totalBigStakes = totalBigStakes - userBigStake[user] + amount; totalBigStakes = totalBigStakes - userBigStake[user] + amount;
// Set original stake only if this is the first time (never changes after)
if (userOriginalStake[user] == 0) {
userOriginalStake[user] = amount;
}
// Set user's big stake // Set user's big stake
userBigStake[user] = amount; userBigStake[user] = amount;
@@ -732,8 +749,8 @@ contract CunaFinanceBsc is Initializable, ReentrancyGuardUpgradeable {
userBigStake[seller] -= value; userBigStake[seller] -= value;
userBigStake[msg.sender] += buyerStake; userBigStake[msg.sender] += buyerStake;
pendingSellStakes[seller] -= value; pendingSellStakes[seller] -= value;
// Note: totalBigStakes decreases by protocolShare (value - buyerStake) // Note: totalBigStakes decreases by protocolShare
totalBigStakes -= (value - buyerStake); totalBigStakes -= protocolShare;
// Track marketplace sales for seller // Track marketplace sales for seller
marketplace_sales[seller] += salePrice; marketplace_sales[seller] += salePrice;