diff --git a/Packages/io.chainsafe.web3-unity.marketplace/Runtime/Scripts/Marketplace/Marketplace.cs b/Packages/io.chainsafe.web3-unity.marketplace/Runtime/Scripts/Marketplace/Marketplace.cs index 4d7a6df11..d07df65f5 100644 --- a/Packages/io.chainsafe.web3-unity.marketplace/Runtime/Scripts/Marketplace/Marketplace.cs +++ b/Packages/io.chainsafe.web3-unity.marketplace/Runtime/Scripts/Marketplace/Marketplace.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Numerics; using System.Threading.Tasks; +using ChainSafe.Gaming.Evm.Transactions; using ChainSafe.Gaming.UnityPackage; using ChainSafe.Gaming.UnityPackage.Model; using ChainSafe.Gaming.Web3; @@ -133,7 +134,7 @@ public class Marketplace /// Description of the 721 collection being created /// If minting is public or not /// Contract send data object - public static async Task Create721Collection(string _bearerToken, string _name, string _description, bool _isMintingPublic) + public static async Task Create721Collection(string _bearerToken, string _name, string _description, bool _isMintingPublic) { var logoImageData = await UploadPlatforms.GetImageData(); var bannerImageData = await UploadPlatforms.GetImageData(); @@ -163,8 +164,9 @@ public static async Task Create721Collection(string _bearerToken, stri collectionData.banner, _isMintingPublic }; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, Token.ABI.MarketplaceFactory, ChainSafeContracts.MarketplaceContracts[Web3Accessor.Web3.ChainConfig.ChainId], args); - return data; + var contract = Web3Accessor.Web3.ContractBuilder.Build(ABI.MarketplaceFactory, ChainSafeContracts.MarketplaceContracts[Web3Accessor.Web3.ChainConfig.ChainId]); + var data = await contract.SendWithReceipt(method, args); + return data.receipt; } /// @@ -176,7 +178,7 @@ public static async Task Create721Collection(string _bearerToken, stri /// Description of the 1155 collection being created /// If minting is public or not /// Contract send data object - public static async Task Create1155Collection(string _bearerToken, string _name, string _description, bool _isMintingPublic) + public static async Task Create1155Collection(string _bearerToken, string _name, string _description, bool _isMintingPublic) { try { @@ -206,8 +208,9 @@ public static async Task Create1155Collection(string _bearerToken, str collectionData.banner, _isMintingPublic }; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, Token.ABI.MarketplaceFactory, ChainSafeContracts.MarketplaceContracts[Web3Accessor.Web3.ChainConfig.ChainId], args); - return data; + var contract = Web3Accessor.Web3.ContractBuilder.Build(ABI.MarketplaceFactory, ChainSafeContracts.MarketplaceContracts[Web3Accessor.Web3.ChainConfig.ChainId]); + var data = await contract.SendWithReceipt(method, args); + return data.receipt; } catch (Web3Exception e) { @@ -222,7 +225,7 @@ public static async Task Create1155Collection(string _bearerToken, str /// 721 collection contract to mint from/to /// URI in full format i.e https://ipfs.chainsafe.io/ipfs/bafyjvzacdj4apx52hvbyjkwyf7i6a7t3pcqd4kw4xxfc67hgvn3a /// Contract send data object - public static async Task Mint721CollectionNft(string _collectionContract, string _uri) + public static async Task Mint721CollectionNft(string _collectionContract, string _uri) { try { @@ -232,8 +235,9 @@ public static async Task Mint721CollectionNft(string _collectionContra Web3Accessor.Web3.Signer.PublicAddress, _uri }; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, Token.ABI.GeneralErc721, _collectionContract, args); - return data; + var contract = Web3Accessor.Web3.ContractBuilder.Build(ABI.GeneralErc721, _collectionContract); + var data = await contract.SendWithReceipt(method, args); + return data.receipt; } catch (Web3Exception e) { @@ -249,7 +253,7 @@ public static async Task Mint721CollectionNft(string _collectionContra /// URI in full format i.e https://ipfs.chainsafe.io/ipfs/bafyjvzacdj4apx52hvbyjkwyf7i6a7t3pcqd4kw4xxfc67hgvn3a /// Amount of Nfts to mint /// Contract send data object - public static async Task Mint1155CollectionNft(string _collectionContract, string _uri, string _amount) + public static async Task Mint1155CollectionNft(string _collectionContract, string _uri, string _amount) { try { @@ -261,8 +265,10 @@ public static async Task Mint1155CollectionNft(string _collectionContr _uri, amount }; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, Token.ABI.GeneralErc1155, _collectionContract, args); - return data; + + var contract = Web3Accessor.Web3.ContractBuilder.Build(ABI.GeneralErc1155, _collectionContract); + var data = await contract.SendWithReceipt(method, args); + return data.receipt; } catch (Web3Exception e) { @@ -294,7 +300,7 @@ public static async Task DeleteCollection(string _bearerToken, string _c /// Marketplace description /// If whitelisting is enabled or not /// Contract send data object - public static async Task CreateMarketplace(string _bearerToken, string _name, string _description, bool _whitelisting) + public static async Task CreateMarketplace(string _bearerToken, string _name, string _description, bool _whitelisting) { try { @@ -317,8 +323,9 @@ public static async Task CreateMarketplace(string _bearerToken, string collectionData.id, _whitelisting }; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, Token.ABI.MarketplaceFactory, ChainSafeContracts.MarketplaceContracts[Web3Accessor.Web3.ChainConfig.ChainId] , args); - return data; + var contract = Web3Accessor.Web3.ContractBuilder.Build(ABI.MarketplaceFactory, ChainSafeContracts.MarketplaceContracts[Web3Accessor.Web3.ChainConfig.ChainId]); + var data = await contract.SendWithReceipt(method, args); + return data.receipt; } catch (Web3Exception e) { @@ -348,7 +355,7 @@ public static async Task DeleteMarketplace(string _bearerToken, string _ /// Marketplace to approve /// Permission being granted /// Contract send data object - public static async Task SetApprovalMarketplace(string _nftContract, string _marketplaceContract, string _type, bool _permission) + public static async Task SetApprovalMarketplace(string _nftContract, string _marketplaceContract, string _type, bool _permission) { try { @@ -359,8 +366,9 @@ public static async Task SetApprovalMarketplace(string _nftContract, s _permission }; var abi = _type == "721" ? Token.ABI.GeneralErc721 : Token.ABI.GeneralErc1155; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, abi, _nftContract, args); - return data; + var contract = Web3Accessor.Web3.ContractBuilder.Build(abi, _nftContract); + var data = await contract.SendWithReceipt(method, args); + return data.receipt; } catch (Web3Exception e) { @@ -369,7 +377,14 @@ public static async Task SetApprovalMarketplace(string _nftContract, s } } - public static async Task PurchaseNft(string _marketplaceContract, string _itemId, string _amountToSend) + /// + /// Purchases NFT from the marketplace + /// + /// The marketplace contract to purchase from + /// The NFT id to purchase + /// The amount to send in wei + /// Contract send data object + public static async Task PurchaseNft(string _marketplaceContract, string _itemId, string _amountToSend) { try { @@ -379,8 +394,13 @@ public static async Task PurchaseNft(string _marketplaceContract, stri { itemId }; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, Token.ABI.Marketplace, _marketplaceContract, args, new HexBigInteger(_amountToSend)); - return data; + var tx = new TransactionRequest + { + Value = new HexBigInteger(BigInteger.Parse(_amountToSend).ToString("X")) + }; + var contract = Web3Accessor.Web3.ContractBuilder.Build(ABI.Marketplace, _marketplaceContract); + var data = await contract.SendWithReceipt(method, args, tx); + return data.receipt; } catch (Web3Exception e) { @@ -397,7 +417,7 @@ public static async Task PurchaseNft(string _marketplaceContract, stri /// Toked ID to list /// Price in wei to list for /// Contract send data object - public static async Task ListNftsToMarketplace(string _marketplaceContract, string _nftContract, string _tokenId, string _priceInWei) + public static async Task ListNftsToMarketplace(string _marketplaceContract, string _nftContract, string _tokenId, string _priceInWei) { try { @@ -412,8 +432,9 @@ public static async Task ListNftsToMarketplace(string _marketplaceCont priceInWei, deadline }; - var data = await Evm.ContractSend(Web3Accessor.Web3, method, Token.ABI.Marketplace, _marketplaceContract, args); - return data; + var contract = Web3Accessor.Web3.ContractBuilder.Build(ABI.Marketplace, _marketplaceContract); + var data = await contract.SendWithReceipt(method, args); + return data.receipt; } catch (Web3Exception e) { diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/EVM/Token/Evm.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/EVM/Token/Evm.cs index e712b951c..8347590cb 100644 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/EVM/Token/Evm.cs +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/EVM/Token/Evm.cs @@ -95,16 +95,14 @@ public static async Task SendArray(Web3 web3, string method, string object[] objArray = array.Cast().ToArray(); return await contract.Send(method, new object[] { objArray }); } - - // todo danger - possible money loss - // todo rework input - public static async Task SendTransaction(Web3 web3, string to) + + public static async Task SendTransaction(Web3 web3, string to, BigInteger value) { var txRequest = new TransactionRequest { To = to, - Value = new HexBigInteger(12300000000000000), - MaxFeePerGas = new HexBigInteger((await web3.RpcProvider.GetFeeData()).MaxFeePerGas), + Value = new HexBigInteger(value.ToString("X")), + MaxFeePerGas = new HexBigInteger((await web3.RpcProvider.GetFeeData()).MaxFeePerGas) }; var response = await web3.TransactionExecutor.SendTransaction(txRequest); return response.Hash; diff --git a/Packages/io.chainsafe.web3-unity/Samples~/Web3.Unity/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs b/Packages/io.chainsafe.web3-unity/Samples~/Web3.Unity/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs index 62b17b03a..e0e25a1a6 100644 --- a/Packages/io.chainsafe.web3-unity/Samples~/Web3.Unity/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs +++ b/Packages/io.chainsafe.web3-unity/Samples~/Web3.Unity/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs @@ -59,6 +59,7 @@ public class EvmCalls : MonoBehaviour [Header("Send Transaction Call")] [SerializeField] private string toAddress = "0xdD4c825203f97984e7867F11eeCc813A036089D1"; + [SerializeField] private string value = "12300000000000000"; #endregion @@ -223,7 +224,7 @@ public async void RegisteredContract() /// public async void SendTransaction() { - var transactionHash = await Evm.SendTransaction(Web3Accessor.Web3, toAddress); + var transactionHash = await Evm.SendTransaction(Web3Accessor.Web3, toAddress, BigInteger.Parse(value)); SampleOutputUtil.PrintResult(transactionHash, nameof(Evm), nameof(Evm.SendTransaction)); } diff --git a/Packages/io.chainsafe.web3-unity/Tests/Runtime/EvmCustomResponseTests.cs b/Packages/io.chainsafe.web3-unity/Tests/Runtime/EvmCustomResponseTests.cs index 97481e1db..4b069d1a0 100644 --- a/Packages/io.chainsafe.web3-unity/Tests/Runtime/EvmCustomResponseTests.cs +++ b/Packages/io.chainsafe.web3-unity/Tests/Runtime/EvmCustomResponseTests.cs @@ -28,6 +28,7 @@ public class EvmCustomResponseTests private const int Transfer1155Amount = 1; private const string SendToAddress = "0xdD4c825203f97984e7867F11eeCc813A036089D1"; + private BigInteger SendToValue = 12300000000000000; private BigInteger TransferErc20Amount = 1; @@ -101,7 +102,7 @@ public IEnumerator TestSendTransaction() { const string testResponse = "0x3446b949c3d214fba7e61c9cf127eac6cd0b2983564cf76be618099879b6f1e1"; yield return BuildWeb3WithTestResponse(testResponse); - var sendTransaction = Evm.SendTransaction(web3, SendToAddress); + var sendTransaction = Evm.SendTransaction(web3, SendToAddress, SendToValue); yield return new WaitUntil(() => sendTransaction.IsCompleted); if (sendTransaction.Exception != null) throw sendTransaction.Exception; Assert.IsTrue(sendTransaction.IsCompletedSuccessfully); diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs index 62b17b03a..e0e25a1a6 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/EVM/EvmCalls.cs @@ -59,6 +59,7 @@ public class EvmCalls : MonoBehaviour [Header("Send Transaction Call")] [SerializeField] private string toAddress = "0xdD4c825203f97984e7867F11eeCc813A036089D1"; + [SerializeField] private string value = "12300000000000000"; #endregion @@ -223,7 +224,7 @@ public async void RegisteredContract() /// public async void SendTransaction() { - var transactionHash = await Evm.SendTransaction(Web3Accessor.Web3, toAddress); + var transactionHash = await Evm.SendTransaction(Web3Accessor.Web3, toAddress, BigInteger.Parse(value)); SampleOutputUtil.PrintResult(transactionHash, nameof(Evm), nameof(Evm.SendTransaction)); } diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/Marketplace/MarketplaceCalls.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/Marketplace/MarketplaceCalls.cs index 6a44404aa..caef96831 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/Marketplace/MarketplaceCalls.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/SampleMain/Marketplace/MarketplaceCalls.cs @@ -63,7 +63,7 @@ public class MarketplaceCalls : MonoBehaviour [Header("Marketplace purchase calls")] [SerializeField] private string marketplaceContractToBuyFrom = "Set marketplace contract to buy from"; - [SerializeField] private string tokenIdToBuy = "Set token ID to buy"; + [SerializeField] private string itemIdToBuy = "Set item ID to buy (the index id of the nft in the marketplace i.e 0 or 1)"; [SerializeField] private string weiPriceToBuy = "Set price in wei to buy with i.e 100000000000000"; #endregion @@ -167,9 +167,8 @@ public async void GetTokenOwners() /// public async void Create721Collection() { - var data = await Marketplace.Create721Collection(bearerToken, collectionName721, collectionDescription721, collectionMintingPublic721); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.Create721Collection(bearerToken, collectionName721, collectionDescription721, collectionMintingPublic721); + Debug.Log($"TX: {response.TransactionHash}"); } /// @@ -177,9 +176,8 @@ public async void Create721Collection() /// public async void Create1155Collection() { - var data = await Marketplace.Create1155Collection(bearerToken, collectionName1155, collectionDescription1155, collectionMintingPublic1155); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.Create1155Collection(bearerToken, collectionName1155, collectionDescription1155, collectionMintingPublic1155); + Debug.Log($"TX: {response.TransactionHash}"); } /// @@ -187,9 +185,8 @@ public async void Create1155Collection() /// public async void Mint721CollectionNft() { - var data = await Marketplace.Mint721CollectionNft(collectionContract721, uri721); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.Mint721CollectionNft(collectionContract721, uri721); + Debug.Log($"TX: {response.TransactionHash}"); } /// @@ -197,9 +194,8 @@ public async void Mint721CollectionNft() /// public async void Mint1155CollectionNft() { - var data = await Marketplace.Mint1155CollectionNft(collectionContract1155, uri1155, amount1155); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.Mint1155CollectionNft(collectionContract1155, uri1155, amount1155); + Debug.Log($"TX: {response.TransactionHash}"); } /// @@ -216,9 +212,8 @@ public async void DeleteCollection() /// public async void CreateMarketplace() { - var data = await Marketplace.CreateMarketplace(bearerToken, marketplaceName, marketplaceDescription, marketplaceWhitelisting); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.CreateMarketplace(bearerToken, marketplaceName, marketplaceDescription, marketplaceWhitelisting); + Debug.Log($"TX: {response.TransactionHash}"); } /// @@ -235,9 +230,8 @@ public async void DeleteMarketplace() /// public async void ApproveListNftsToMarketplace() { - var data = await Marketplace.SetApprovalMarketplace(collectionContractToList, marketplaceContractToListTo, "1155",true); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.SetApprovalMarketplace(collectionContractToList, marketplaceContractToListTo, "1155",true); + Debug.Log($"TX: {response.TransactionHash}"); } /// @@ -245,9 +239,8 @@ public async void ApproveListNftsToMarketplace() /// public async void RevokeApprovalListNftsToMarketplace() { - var data = await Marketplace.SetApprovalMarketplace(collectionContractToList, marketplaceContractToListTo, "1155",false); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.SetApprovalMarketplace(collectionContractToList, marketplaceContractToListTo, "1155",false); + Debug.Log($"TX: {response.TransactionHash}"); } /// @@ -255,19 +248,17 @@ public async void RevokeApprovalListNftsToMarketplace() /// public async void ListNftsToMarketplace() { - var data = await Marketplace.ListNftsToMarketplace(marketplaceContractToListTo,collectionContractToList, tokenIdToList, weiPriceToList); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.ListNftsToMarketplace(marketplaceContractToListTo,collectionContractToList, tokenIdToList, weiPriceToList); + Debug.Log($"TX: {response.TransactionHash}"); } /// - /// Purchases an Nft from the marketplace + /// Purchases Nft from the marketplace /// public async void PurchaseNftFromMarketplace() { - var data = await Marketplace.PurchaseNft(marketplaceContractToBuyFrom, tokenIdToBuy, weiPriceToBuy); - var response = SampleOutputUtil.BuildOutputValue(data); - Debug.Log($"TX: {response}"); + var response = await Marketplace.PurchaseNft(marketplaceContractToBuyFrom, itemIdToBuy, weiPriceToBuy); + Debug.Log($"TX: {response.TransactionHash}"); } #endregion