Smart Contracts in Java - Execution Layer Research - Ethereum Research Ethereum Research Smart Contracts in Java Execution Layer Research jeyakatsa February 13, 2022, 1:50am 1 Abstract Converting Solidity Keywords into Java Dependencies in order for a library of Smart-Contract implementations to be built in the Java programming language. Motivation Currently, there are 200,000 Solidity/Ethereum Developers (Worldwide) and 7.1million Java Developers (Worldwide) respectfully thus allowing Smart-Contracts to be built in Java would help onboard a plethoric number of developers into the Ethereum Ecosystem. Specifications Smart-Contract Storage example in Solidity: pragma solidity >=0.4.16 <0.9.0; contract SimpleStorage { uint storedData; function set(uint x) public { storedData = x; } function get() public view returns (uint) { return storedData; } } Smart-Contract Storage example in Java: public class SimpleStorage { private Uint256 storedData; public void setStoredData (Uint256 storedData) { this.storedData = storedData; } public Uint256 getStoredData () { return storedData; } } Rationale Solidity Keywords to Java Dependency conversion process: The uint keyword in Solidity essentially represents a pre-packaged library containing a 256 bit byte. In Java, a dependency is created to suplement for the Solidity keyword as follows: Uint256 Java Dependency (in place of uint Solidity Keyword) example: public interface Uint256 { static byte[] ivBytes = new byte[256]; static int iterations = 65536; static int keySize = 256; static byte[] uint = new byte[256]; public default void Uint256() throws Exception { decrypt(); } public static void decrypt() throws Exception { char[] placeholderText = new char[0]; SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); PBEKeySpec spec = new PBEKeySpec(placeholderText, Uint256.uint, iterations, keySize); SecretKey secretkey = skf.generateSecret(spec); SecretKeySpec secretSpec = new SecretKeySpec(secretkey.getEncoded(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secretSpec, new IvParameterSpec(ivBytes)); byte[] decryptedTextBytes = null; try { decryptedTextBytes = cipher.doFinal(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } decryptedTextBytes.toString(); } } Execution Necessities: The contract’s bytecode: this is generated through the javac git command as follows: javac MySmartContract.java ETH for gas: you’ll set your gas limit like other transactions so be aware that contract deployment needs a lot more gas than a simple ETH transfer. A deployment script or plugin. Access to an Ethereum Node, either by running your own, connecting to a public node, or via an API key using a node service like Infura or Alchemy. Note: This R&D project is still early in its development, so questions/contributions/conversations are heavily welcome. The Work: Java Smart Contract Abstraction for Ethereum R&D Java Smart Contract Abstraction for Ethereum 2 Likes Home Categories FAQ/Guidelines Terms of Service Privacy Policy Powered by Discourse, best viewed with JavaScript enabled