Skip to content

Commit

Permalink
Merge branch 'dev' into p-895-This-Branch-Will-Not-Merged-Until-Our-D…
Browse files Browse the repository at this point in the history
…ecimal-Migration-Is-Ready!
  • Loading branch information
wangminqi authored Aug 1, 2024
2 parents 04416a8 + 09004f4 commit a6abafa
Show file tree
Hide file tree
Showing 54 changed files with 634 additions and 194 deletions.
37 changes: 23 additions & 14 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ similar-asserts = { version = "1.5.0" }
sha3 = { version = "0.10", default-features = false }
futures = { version = "0.3.30", features = ["compat"] }
jsonrpsee = { version = "0.16.3", features = ["server"] }
tokio = { version = "1.38.1", features = ["macros", "sync"] }
tokio = { version = "1.39.2", features = ["macros", "sync"] }
strum = { version = "0.26", default-features = false }
strum_macros = { version = "0.26", default-features = false }
libsecp256k1 = { version = "0.7", default-features = false }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2020-2024 Trust Computing GmbH.
// This file is part of Litentry.
//
// Litentry is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Litentry is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Litentry. If not, see <https://www.gnu.org/licenses/>.

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.8.8;

import "@openzeppelin/contracts/utils/Strings.sol";
import { HttpHeader } from "../libraries/Http.sol";

import "hardhat/console.sol";

contract MockHttpGetI64 {
receive() external payable {}

fallback() external payable {
(string memory url, string memory jsonPointer, ) = abi.decode(
msg.data,
(string, string, HttpHeader[])
);

bool success = true;
uint256 value = 0;

if (
Strings.equal(
url,
"https://blockchain.info/multiaddr?active=bc1pg6qjsrxwg9cvqx0gxstl0t74ynhs2528t7rp0u7acl6etwn5t6vswxrzpa&n=0"
)
) {
// 0.1(decimal is 8)
value = 10000000;
} else if (
Strings.equal(
url,
"https://blockchain.info/multiaddr?active=bc1pqdk57wus42wuh989k3v700n6w584andwg7pvxnrd69ag3rs94cfq40qx2y&n=0"
)
) {
value = 0;
}

console.log("http_get_i64>", url, jsonPointer, value);

bytes memory encodedResult = abi.encode(success, value);

assembly {
return(add(encodedResult, 0x20), mload(encodedResult))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@ pragma solidity ^0.8.8;

import "../libraries/Http.sol";
import "../libraries/Utils.sol";
import "../libraries/Identities.sol";

library BlockchainInfoClient {
function getMultiAddress(
string memory url,
string[] memory accounts
) internal returns (bool, int64) {
string memory url = "https://blockchain.info/multiaddr";
string memory activeQueryParam = "";

for (uint256 i = 0; i < accounts.length; i++) {
Expand All @@ -46,4 +47,25 @@ library BlockchainInfoClient {
HttpHeader[] memory headers = new HttpHeader[](0);
return Http.GetI64(url, "/wallet/final_balance", headers);
}

function isSupportedNetwork(uint32 network) internal pure returns (bool) {
return
network == Web3Networks.BitcoinP2tr ||
network == Web3Networks.BitcoinP2pkh ||
network == Web3Networks.BitcoinP2sh ||
network == Web3Networks.BitcoinP2wpkh ||
network == Web3Networks.BitcoinP2wsh;
}

function getTokenBalance(
string[] memory accounts
) internal returns (uint256) {
(bool balanceSuccess, int64 balance) = BlockchainInfoClient
.getMultiAddress(accounts);
if (balanceSuccess) {
return uint256(uint64(balance));
} else {
return 0;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// Copyright 2020-2024 Trust Computing GmbH.
// This file is part of Litentry.
//
// Litentry is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Litentry is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Litentry. If not, see <https://www.gnu.org/licenses/>.

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.8.8;
import "./Constants.sol";
import { BRC20 } from "./brc20/BRC20.sol";
library Btc {
function getTokenRanges() internal pure returns (uint256[] memory) {
// [0.0, 0.001, 0.1, 0.3, 0.6, 1.0, 2.0, 5.0, 10.0, 15.0, 25.0, 30.0, 40.0, 50.0];
// all ranges multiplied by decimals_factor(1000).
uint256[] memory ranges = new uint256[](14);
ranges[0] = 0;
ranges[1] = 1;
ranges[2] = 100;
ranges[3] = 300;
ranges[4] = 600;
ranges[5] = 1000;
ranges[6] = 2000;
ranges[7] = 5000;
ranges[8] = 10000;
ranges[9] = 15000;
ranges[10] = 25000;
ranges[11] = 30000;
ranges[12] = 40000;
ranges[13] = 50000;
return ranges;
}

function getTokenInfo() internal pure returns (TokenInfo[] memory) {
uint32[] memory networks = BRC20.getDefaultTokenNetworks();
TokenInfo[] memory tokenInfoList = new TokenInfo[](networks.length);
for (uint i = 0; i < networks.length; i++) {
tokenInfoList[i] = TokenInfo(
networks[i],
"",
DataProviderTypes.BlockchainInfoClient,
8
);
}

return tokenInfoList;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,21 @@

pragma solidity ^0.8.8;

library Constants {
uint256 constant decimals_factor = 1000;
}
struct TokenInfo {
uint32 network;
string tokenAddress;
uint8 dataprovierType;
uint8 decimals;
}

library Constants {
uint256 constant decimals_factor = 1000;
}

library DataProviderTypes {
uint8 public constant AchainableClient = 0;
uint8 public constant BlockchainInfoClient = 1;
uint8 public constant GeniidataClient = 2;
uint8 public constant MoralisClient = 3;
uint8 public constant NoderealClient = 4;
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import "@openzeppelin/contracts/utils/Strings.sol";
import "../libraries/Http.sol";
import "../libraries/Json.sol";
import "../libraries/Identities.sol";

import "../libraries/Utils.sol";
struct SolanaTokenBalance {
string mint;
string amount;
Expand Down Expand Up @@ -220,4 +220,55 @@ library MoralisClient {
url = "https://deep-index.moralis.io/api/v2.2";
}
}

function getTokenBalance(
uint32 network,
string memory apiKey,
string memory account,
string memory tokenContractAddress,
uint8 tokenDecimals
) internal returns (uint256) {
if (Strings.equal(tokenContractAddress, "Native Token")) {
(bool success, string memory solanaTokenBalance) = MoralisClient
.getSolanaNativeBalance(network, apiKey, account);

if (success) {
(bool parsedStatus, uint256 parsedAmount) = Utils.parseDecimal(
solanaTokenBalance,
tokenDecimals
);
if (parsedStatus) {
return parsedAmount;
}
return 0;
}
} else {
(
bool success,
SolanaTokenBalance[] memory solanaTokenBalance
) = MoralisClient.getSolanaTokensBalance(network, apiKey, account);

if (success) {
for (uint i = 0; i < solanaTokenBalance.length; i++) {
if (
Strings.equal(
solanaTokenBalance[i].mint,
tokenContractAddress
)
) {
(bool parsedStatus, uint256 parsedAmount) = Utils
.parseDecimal(
solanaTokenBalance[i].amount,
tokenDecimals
);
if (parsedStatus) {
return parsedAmount;
}
return 0;
}
}
}
}
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ abstract contract TokenHoldingAmount is DynamicAssertion {
function calculateRange(
uint256 balance,
uint256[] memory ranges
) private pure returns (uint256, uint256, int256) {
) private view returns (uint256, uint256, int256) {
uint256 index = ranges.length - 1;
uint256 min = 0;
int256 max = 0;
Expand All @@ -128,7 +128,6 @@ abstract contract TokenHoldingAmount is DynamicAssertion {
min = ranges[index];
max = int256(ranges[index + 1]);
}

return (index, min, max);
}

Expand Down Expand Up @@ -176,7 +175,7 @@ abstract contract TokenHoldingAmount is DynamicAssertion {
return assertions;
}

function getTokenDecimals() internal pure virtual returns (uint8);
function getTokenDecimals() internal view virtual returns (uint8);

function isSupportedNetwork(
string memory tokenName,
Expand Down
Loading

0 comments on commit a6abafa

Please sign in to comment.