Skip to content

Commit 50c4102

Browse files
authored
Merge pull request #164 from walt-id/feat/appchain_integration
feat : Add support to compliance appchain for IOTA KYC
2 parents ca80553 + b3b0c3f commit 50c4102

File tree

11 files changed

+48
-23
lines changed

11 files changed

+48
-23
lines changed

src/main/kotlin/id/walt/nftkit/Values.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ object Values {
1212
const val MOONBEAM_MAINNET_CHAIN_ID: Long = 1284
1313
const val ASTAR_MAINNET_CHAIN_ID: Long = 592
1414
const val SHIMMEREVM_TESTNET_CHAIN_ID: Long = 1073
15+
const val SHIMMEREVM_APPCHAIN_CHAIN_ID: Long = 1074
1516

1617
const val ETHEREUM_MAINNET_SCAN_API_URL= "api.etherscan.io"
1718
const val ETHEREUM_TESTNET_GOERLI_SCAN_API_URL = "api-goerli.etherscan.io"
1819
const val ETHEREUM_TESTNET_SEPOLIA_SCAN_API_URL = "api-sepolia.etherscan.io"
1920
const val POLYGON_MAINNET_SCAN_API_URL = "api.polygonscan.com"
2021
const val POLYGON_TESTNET_MUMBAI_SCAN_API_URL = "api-testnet.polygonscan.com"
22+
const val SHIMMEREVM_APPCHAIN_BLOCK_EXPLORER_URL = ""
2123

2224
const val ETHEREUM_MAINNET_BLOCK_EXPLORER_URL = "https://etherscan.io"
2325
const val ETHEREUM_TESTNET_GOERLI_BLOCK_EXPLORER_URL = "https://goerli.etherscan.io/"

src/main/kotlin/id/walt/nftkit/chains/evm/erc721/Erc721TokenStandard.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ object Erc721TokenStandard : IErc721TokenStandard {
294294
EVMChain.ASTAR -> Values.ASTAR_MAINNET_CHAIN_ID
295295
EVMChain.MOONBEAM -> Values.MOONBEAM_MAINNET_CHAIN_ID
296296
EVMChain.SHIMMEREVM -> Values.SHIMMEREVM_TESTNET_CHAIN_ID
297+
EVMChain.SHIMMEREVM_APPCHAIN -> Values.SHIMMEREVM_APPCHAIN_CHAIN_ID
297298
}
298299
val transactionManager: TransactionManager = RawTransactionManager(
299300
web3j, credentials, chainId
@@ -318,4 +319,4 @@ object Erc721TokenStandard : IErc721TokenStandard {
318319
}
319320

320321

321-
}
322+
}

src/main/kotlin/id/walt/nftkit/chains/evm/erc721/SoulBoundTokenStandard.kt

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,14 @@ object SoulBoundTokenStandard : ISoulBoundTokenStandard {
2727
private fun loadContract(chain: EVMChain, address: String, signedAccount: String? ="") : WaltidSoulBound {
2828
val web3j = ProviderFactory.getProvider(chain)?.getWeb3j()
2929

30-
val privateKey: String = if(signedAccount == null || "" == (signedAccount)){
30+
val privateKey: String = if((signedAccount == null || "" == (signedAccount)) && chain == EVMChain.SHIMMEREVM_APPCHAIN){
31+
WaltIdServices.loadChainConfig().privateKeyAppchain
32+
}else if(signedAccount == null || "" == (signedAccount) ) {
3133
WaltIdServices.loadChainConfig().privateKey
32-
}else{
34+
}
35+
else{
3336
val lowercaseAddress= WaltIdServices.loadAccountKeysConfig().keys.mapKeys { it.key.lowercase() }
34-
lowercaseAddress[signedAccount.lowercase()]!!
37+
lowercaseAddress[signedAccount?.lowercase()]!!
3538
}
3639

3740
val credentials: Credentials = Credentials.create(privateKey)
@@ -46,6 +49,7 @@ object SoulBoundTokenStandard : ISoulBoundTokenStandard {
4649
EVMChain.ASTAR -> Values.ASTAR_MAINNET_CHAIN_ID
4750
EVMChain.MOONBEAM -> Values.MOONBEAM_MAINNET_CHAIN_ID
4851
EVMChain.SHIMMEREVM -> Values.SHIMMEREVM_TESTNET_CHAIN_ID
52+
EVMChain.SHIMMEREVM_APPCHAIN -> Values.SHIMMEREVM_APPCHAIN_CHAIN_ID
4953
}
5054
val transactionManager: TransactionManager = RawTransactionManager(
5155
web3j, credentials, chainId
@@ -102,6 +106,7 @@ object SoulBoundTokenStandard : ISoulBoundTokenStandard {
102106
EVMChain.ASTAR -> Values.ASTAR_MAINNET_CHAIN_ID
103107
EVMChain.MOONBEAM -> Values.MOONBEAM_MAINNET_CHAIN_ID
104108
EVMChain.SHIMMEREVM -> Values.SHIMMEREVM_TESTNET_CHAIN_ID
109+
EVMChain.SHIMMEREVM_APPCHAIN -> Values.SHIMMEREVM_APPCHAIN_CHAIN_ID
105110
}
106111

107112
val web3j = ProviderFactory.getProvider(chain)?.getWeb3j()
@@ -149,4 +154,4 @@ object SoulBoundTokenStandard : ISoulBoundTokenStandard {
149154
): TransactionReceipt {
150155
return loadContract(chain, contractAddress, signedAccount).unequip(tokenId).send()
151156
}
152-
}
157+
}

src/main/kotlin/id/walt/nftkit/services/NftService.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ enum class Chain {
9494
ALGORAND_MAINNET,
9595
ALGORAND_TESTNET,
9696
ALGORAND_BETANET,
97-
SHIMMEREVM
97+
SHIMMEREVM,
98+
SHIMMEREVM_APPCHAIN
9899
}
99100

100101
enum class EVMChain {
@@ -106,6 +107,7 @@ enum class EVMChain {
106107
ASTAR,
107108
MOONBEAM,
108109
SHIMMEREVM,
110+
SHIMMEREVM_APPCHAIN
109111
}
110112

111113
enum class TokenStandard {

src/main/kotlin/id/walt/nftkit/services/WaltIdServices.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ data class Providers(
1818
val moonbeam: String,
1919
val opal: String,
2020
val unique: String,
21-
val shimmerevm: String
21+
val shimmerevm: String,
22+
val shimmerevmAppChain : String
2223
)
2324

24-
data class ChainConfig(val providers: Providers, val privateKey: String)
25+
data class ChainConfig(val providers: Providers, val privateKey: String , val privateKeyAppchain: String)
2526

2627
data class KeysConfig(val keys: Map<String, String>)
2728

@@ -146,6 +147,7 @@ object WaltIdServices {
146147
EVMChain.POLYGON -> Values.POLYGON_MAINNET_BLOCK_EXPLORER_URL
147148
EVMChain.MUMBAI -> Values.POLYGON_TESTNET_MUMBAI_BLOCK_EXPLORER_URL
148149
EVMChain.SHIMMEREVM -> Values.SHIMMEREVM_TESTNET_BLOCK_EXPLORER_URL
150+
EVMChain.SHIMMEREVM_APPCHAIN -> Values.SHIMMEREVM_APPCHAIN_BLOCK_EXPLORER_URL
149151
else -> {
150152
throw Exception("${chain.toString()} is not supported")
151153
}

src/main/kotlin/id/walt/nftkit/utilis/Common.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ object Common {
114114
}
115115

116116
fun isEVMChain(chain: Chain): Boolean{
117-
val EVMChains= listOf(Chain.ETHEREUM, Chain.POLYGON, Chain.GOERLI, Chain.SEPOLIA, Chain.MUMBAI, Chain.SHIMMEREVM)
117+
val EVMChains= listOf(Chain.ETHEREUM, Chain.POLYGON, Chain.GOERLI, Chain.SEPOLIA, Chain.MUMBAI, Chain.SHIMMEREVM , Chain.SHIMMEREVM_APPCHAIN)
118118
return chain in EVMChains
119119
}
120120

src/main/kotlin/id/walt/nftkit/utilis/WaltIdGasProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ import java.math.BigInteger
1010
// - https://polygonscan.com/address/0xb789711a8cf2a3938779d01866a4c376598b9fe6
1111

1212
// Config Gas: 80 Wei
13-
object WaltIdGasProvider : StaticGasProvider(BigInteger.valueOf(1_000_000_000_000L), BigInteger.valueOf(2_498_868))
13+
object WaltIdGasProvider : StaticGasProvider(BigInteger.valueOf(10000000000), BigInteger.valueOf(2_498_868))

src/main/kotlin/id/walt/nftkit/utilis/providers/ProviderFactory.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ object ProviderFactory {
1313
EVMChain.ASTAR -> AstarWeb3()
1414
EVMChain.MOONBEAM -> MoonbeamWeb3()
1515
EVMChain.SHIMMEREVM -> IotaWeb3()
16+
EVMChain.SHIMMEREVM_APPCHAIN -> ShimmerAppChain()
1617
}
1718
}
1819

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package id.walt.nftkit.utilis.providers
2+
3+
import id.walt.nftkit.services.WaltIdServices
4+
import org.web3j.protocol.Web3j
5+
import org.web3j.protocol.http.HttpService
6+
7+
class ShimmerAppChain : Web3jInstance {
8+
override fun getWeb3j(): Web3j {
9+
return Web3j.build(HttpService(WaltIdServices.loadChainConfig().providers.shimmerevmAppChain))
10+
}
11+
}

src/main/resources/walt-default.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ providers:
2121
moonbeam: "https://rpc.api.moonbeam.network"
2222
unique: "https://rpc.unique.network"
2323
opal: "https://rpc-opal.unique.network"
24-
shimmerevm: "https://json-rpc.evm.testnet.shimmer.network"
25-
24+
shimmerevmAppChain: "https://fpgaonkrwz.dune.spyce5.com/wasp/api/v1/chains/rms1pzhlaz2aalpsktkqacayyl2xr6s3rsa5h69lmc7mleq4wnaryejkgnprd6k/evm"
25+
shimmerevm : "https://json-rpc.evm.testnet.shimmer.network"
2626

2727
#privateKey: "bd4cb3e507f342ee3a710370cef39dda48f17b0a158b0b8dd3f000fbd5b2c2d9"
28-
privateKey: "9224cd6478dc789815e4baaf3771709c69e55432ac8eb38dec4826a48840ddca"
28+
privateKeyAppchain: "57901fd46ccf70f3f21e3f16815c9b18add89e0d7f2fcb3c847882ad8126408d"
2929
#privateKey: "a1fcab9b58015f452c9a89d4cde4807a80111ab27142730bfb96be936e576be1"
3030
#privateKey: "bd4cb3e507f342ee3a710370cef39dda48f17b0a158b0b8dd3f000fbd5b2c2d9"
31-
31+
privateKey: "9224cd6478dc789815e4baaf3771709c69e55432ac8eb38dec4826a48840ddca"
3232
keys:
3333
0xaf87c5Ce7a1fb6BD5aaDB6dd9C0b8EF51EF1BC31: "bd4cb3e507f342ee3a710370cef39dda48f17b0a158b0b8dd3f000fbd5b2c2d9"
3434
0x8448Ff4b2733b52f62d81ca46d64bD16786299Cd: "d720ef2cb49c6cbe94175ed413d27e635c5acaa1b7cf03d1faad3a0abc2f53f3"

src/test/kotlin/id/walt/nftkit/blockchainReadingOperations/evm/Erc721Standard.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,17 @@ class Erc721Standard : StringSpec({
5959

6060

6161
"Verifying IPFS metadata using NFTs storage".config(){
62-
val tokenid = BigInteger.valueOf(10)
63-
var uri = NftService.getNftMetadataUri(EVMChain.MUMBAI,"0xf277BE034881eE38A9b270E5b6C5c6f333Af2517" ,tokenid)
62+
val tokenid = BigInteger.valueOf(3)
63+
var uri = NftService.getNftMetadataUri(EVMChain.MUMBAI,"0x7Bf34C715e9A7ADEc6c4fa1CFEE4120E2808fD8c" ,tokenid)
6464
val result = NftService.getIPFSMetadataUsingNFTStorage(uri)
65-
result.description shouldBe "string"
66-
result.name shouldBe "string"
67-
result.image shouldBe "string"
68-
result.external_url shouldBe "string"
69-
result.attributes?.get(0)!!.trait_type shouldBe "string"
70-
(result.attributes?.get(0)!!.value?.content ?: "") shouldBe "15/7/2022 10:30:07"
65+
result.description shouldBe "Walt Membership"
66+
result.name shouldBe "Walt Membership"
67+
result.image shouldBe "ipfs://bafkreicl5qtcwcckkblm2qdut4bwyu3dksq36wipfrzui5tnbdydzpuhcq"
68+
result.external_url shouldBe ""
69+
result.attributes?.get(0)!!.trait_type shouldBe "ceramic_hackathon_attendee"
70+
71+
7172
}
7273

7374

74-
})
75+
})

0 commit comments

Comments
 (0)