abi2sol 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/Manifest.txt +7 -0
- data/README.md +136 -0
- data/Rakefile +38 -0
- data/bin/abi2sol +17 -0
- data/lib/abi2sol/generate.rb +57 -0
- data/lib/abi2sol.rb +81 -0
- metadata +105 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 8ae4954b393b297c829f3c6b04915ca618a70be4651d422e412aa0348a6f22f8
         | 
| 4 | 
            +
              data.tar.gz: 69fce3be531ce078a95c1fd1d359817ff9291503ff9fd6a7cd40f4f67ec05135
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 6c157cc040f6bccf94c6d0fc90ad2d0a3dacbdcb9b0ea28f3fae406c66fdd065db9a774035bf52bef1a5488aca1258ce32302f37ff4bd0bcdbff07e0a188c964
         | 
| 7 | 
            +
              data.tar.gz: d87ed5a52b9d59eac1540f7b6672086e868f2915fbc7f4fe8d1036fbd88dea75517181d87e80b15f79206243597b5cafc92e3ccc31c947159042a6e780a6e172
         | 
    
        data/CHANGELOG.md
    ADDED
    
    
    
        data/Manifest.txt
    ADDED
    
    
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,136 @@ | |
| 1 | 
            +
            # abi2sol
         | 
| 2 | 
            +
             | 
| 3 | 
            +
             | 
| 4 | 
            +
            abi2sol gem - command-line tool for application binary interface (abi) to solidity (contract) source code generation for Ethereum & Co.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            * home  :: [github.com/rubycocos/blockchain](https://github.com/rubycocos/blockchain)
         | 
| 8 | 
            +
            * bugs  :: [github.com/rubycocos/blockchain/issues](https://github.com/rubycocos/blockchain/issues)
         | 
| 9 | 
            +
            * gem   :: [rubygems.org/gems/abi2sol](https://rubygems.org/gems/abi2sol)
         | 
| 10 | 
            +
            * rdoc  :: [rubydoc.info/gems/abi2sol](http://rubydoc.info/gems/abi2sol)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
             | 
| 13 | 
            +
             | 
| 14 | 
            +
            ## New to the Solidity (Contract) Programming Language?
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            See [**Awesome Solidity @ Open Blockchains »**](https://github.com/openblockchains/awesome-solidity)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
             | 
| 19 | 
            +
             | 
| 20 | 
            +
             | 
| 21 | 
            +
            ## Usage
         | 
| 22 | 
            +
             | 
| 23 | 
            +
             | 
| 24 | 
            +
            Let's try a dry run:
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            ```
         | 
| 27 | 
            +
            $ abi2sol --help
         | 
| 28 | 
            +
            ```
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            resulting in:
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            ```
         | 
| 33 | 
            +
            abiparser/0.1.2 on Ruby 3.1.1
         | 
| 34 | 
            +
            ==> welcome to the abi2parse tool
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            Usage: abi2sol [options]
         | 
| 37 | 
            +
                    --name STRING                name of contract interface (default: nil)
         | 
| 38 | 
            +
                -h, --help                       Prints this help
         | 
| 39 | 
            +
            ```
         | 
| 40 | 
            +
             | 
| 41 | 
            +
             | 
| 42 | 
            +
            Let's try to generate the contract solidity source code
         | 
| 43 | 
            +
            for punks v1 (anno 2017):
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            ```
         | 
| 46 | 
            +
            $ abi2sol --name PunksV1 ./address/0x6ba6f2207e343923ba692e5cae646fb0f566db8d/abi.json
         | 
| 47 | 
            +
            ```
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            resulting in:
         | 
| 50 | 
            +
             | 
| 51 | 
            +
             | 
| 52 | 
            +
            ``` solidity
         | 
| 53 | 
            +
            interface PunksV1 {
         | 
| 54 | 
            +
            // 1 Payable Function(s)
         | 
| 55 | 
            +
            function buyPunk(uint256 punkIndex) payable ;
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            // 7 Transact Functions(s)
         | 
| 58 | 
            +
            function reservePunksForOwner(uint256 maxForThisRun);
         | 
| 59 | 
            +
            function withdraw();
         | 
| 60 | 
            +
            function transferPunk(address to, uint256 punkIndex);
         | 
| 61 | 
            +
            function offerPunkForSaleToAddress(uint256 punkIndex, uint256 minSalePriceInWei, address toAddress);
         | 
| 62 | 
            +
            function offerPunkForSale(uint256 punkIndex, uint256 minSalePriceInWei);
         | 
| 63 | 
            +
            function getPunk(uint256 punkIndex);
         | 
| 64 | 
            +
            function punkNoLongerForSale(uint256 punkIndex);
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            // 14 Query Functions(s)
         | 
| 67 | 
            +
            function name() view  returns (string _);
         | 
| 68 | 
            +
            function punksOfferedForSale(uint256 _) view  returns (bool isForSale, uint256 punkIndex, address seller, uint256 minValue, address onlySellTo);
         | 
| 69 | 
            +
            function totalSupply() view  returns (uint256 _);
         | 
| 70 | 
            +
            function decimals() view  returns (uint8 _);
         | 
| 71 | 
            +
            function imageHash() view  returns (string _);
         | 
| 72 | 
            +
            function nextPunkIndexToAssign() view  returns (uint256 _);
         | 
| 73 | 
            +
            function punkIndexToAddress(uint256 _) view  returns (address _);
         | 
| 74 | 
            +
            function standard() view  returns (string _);
         | 
| 75 | 
            +
            function balanceOf(address _) view  returns (uint256 _);
         | 
| 76 | 
            +
            function symbol() view  returns (string _);
         | 
| 77 | 
            +
            function numberOfPunksToReserve() view  returns (uint256 _);
         | 
| 78 | 
            +
            function numberOfPunksReserved() view  returns (uint256 _);
         | 
| 79 | 
            +
            function punksRemainingToAssign() view  returns (uint256 _);
         | 
| 80 | 
            +
            function pendingWithdrawals(address _) view  returns (uint256 _);
         | 
| 81 | 
            +
            }
         | 
| 82 | 
            +
            ```
         | 
| 83 | 
            +
             | 
| 84 | 
            +
             | 
| 85 | 
            +
            Let's try to generate the contract solidity source code
         | 
| 86 | 
            +
            for punk blocks (anno 2022):
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            ```
         | 
| 89 | 
            +
            $ abi2sol --name PunkBlocks ./address/0x58e90596c2065befd3060767736c829c18f3474c/abi.json
         | 
| 90 | 
            +
            ```
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            resulting in:
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            ``` solidity
         | 
| 95 | 
            +
            interface PunkBlocks {
         | 
| 96 | 
            +
            // 1 Transact Functions(s)
         | 
| 97 | 
            +
            function registerBlock(bytes _dataMale, bytes _dataFemale, uint8 _layer, string _name);
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            // 8 Query Functions(s)
         | 
| 100 | 
            +
            function blocks(bytes32 _) view  returns (uint8 layer /* enum PunkBlocks.Layer */, bytes dataMale, bytes dataFemale);
         | 
| 101 | 
            +
            function getBlocks(uint256 _fromID, uint256 _count) view  returns ((uint8,bytes,bytes)[] _ /* struct PunkBlocks.Block[] */, uint256 _);
         | 
| 102 | 
            +
            function index(uint256 _) view  returns (bytes32 _);
         | 
| 103 | 
            +
            function nextId() view  returns (uint256 _);
         | 
| 104 | 
            +
            function svgFromIDs(uint256[] _ids) view  returns (string _);
         | 
| 105 | 
            +
            function svgFromKeys(bytes32[] _attributeKeys) view  returns (string _);
         | 
| 106 | 
            +
            function svgFromNames(string[] _attributeNames) view  returns (string _);
         | 
| 107 | 
            +
            function svgFromPunkID(uint256 _tokenID) view  returns (string _);
         | 
| 108 | 
            +
            }
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            ```
         | 
| 111 | 
            +
             | 
| 112 | 
            +
             | 
| 113 | 
            +
            and so on.
         | 
| 114 | 
            +
             | 
| 115 | 
            +
             | 
| 116 | 
            +
             | 
| 117 | 
            +
            ## Bonus - Awesome Contracts
         | 
| 118 | 
            +
             | 
| 119 | 
            +
            See the [**Awesome (Ethereum) Contracts  / Blockchain Services @ Open Blockchains**](https://github.com/openblockchains/awesome-contracts) repo.
         | 
| 120 | 
            +
            that is a cache of (ethereum) contract ABIs (application binary interfaces)
         | 
| 121 | 
            +
            and  open source code (if verified / available)
         | 
| 122 | 
            +
            with auto-generated docs via abidoc & friends.
         | 
| 123 | 
            +
             | 
| 124 | 
            +
             | 
| 125 | 
            +
             | 
| 126 | 
            +
            ## License
         | 
| 127 | 
            +
             | 
| 128 | 
            +
            The scripts are dedicated to the public domain.
         | 
| 129 | 
            +
            Use it as you please with no restrictions whatsoever.
         | 
| 130 | 
            +
             | 
| 131 | 
            +
             | 
| 132 | 
            +
            ## Questions? Comments?
         | 
| 133 | 
            +
             | 
| 134 | 
            +
             | 
| 135 | 
            +
            Post them on the [D.I.Y. Punk (Pixel) Art reddit](https://old.reddit.com/r/DIYPunkArt). Thanks.
         | 
| 136 | 
            +
             | 
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,38 @@ | |
| 1 | 
            +
            require 'hoe'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
             | 
| 4 | 
            +
            ###
         | 
| 5 | 
            +
            # hack/ quick fix for broken intuit_values - overwrite with dummy
         | 
| 6 | 
            +
            class Hoe
         | 
| 7 | 
            +
              def intuit_values( input ); end
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
            Hoe.spec 'abi2sol' do
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              self.version = '0.1.0'
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              self.summary = "abi2sol gem - command-line tool for application binary interface (abi) to solidity (contract) source code generation for Ethereum & Co."
         | 
| 16 | 
            +
              self.description = summary
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              self.urls    = { home: 'https://github.com/rubycocos/blockchain' }
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              self.author  = 'Gerald Bauer'
         | 
| 21 | 
            +
              self.email   = 'wwwmake@googlegroups.com'
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              # switch extension to .markdown for gihub formatting
         | 
| 24 | 
            +
              self.readme_file  = 'README.md'
         | 
| 25 | 
            +
              self.history_file = 'CHANGELOG.md'
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              self.extra_deps = [
         | 
| 28 | 
            +
                ['abiparser'],
         | 
| 29 | 
            +
              ]
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              self.licenses = ['Public Domain']
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              self.spec_extras = {
         | 
| 34 | 
            +
                required_ruby_version: '>= 2.3'
         | 
| 35 | 
            +
              }
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            end
         | 
| 38 | 
            +
             | 
    
        data/bin/abi2sol
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ###################
         | 
| 4 | 
            +
            # == DEV TIPS:
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            # For local testing run like:
         | 
| 7 | 
            +
            #
         | 
| 8 | 
            +
            #    ruby -Ilib bin/abi2sol
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
            # Set the executable bit in Linux. Example:
         | 
| 11 | 
            +
            #
         | 
| 12 | 
            +
            #    % chmod a+x bin/abi2sol
         | 
| 13 | 
            +
            #
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            require 'abi2sol'
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            Abi2Sol::Tool.main
         | 
| @@ -0,0 +1,57 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module ABI
         | 
| 3 | 
            +
            class Contract
         | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
              def generate_interface( name: )   ## interface declarations
         | 
| 7 | 
            +
                buf = ''
         | 
| 8 | 
            +
                buf << "interface #{name} {"
         | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
            #  include constructor - why? why not?
         | 
| 12 | 
            +
            #
         | 
| 13 | 
            +
            #   if @ctor
         | 
| 14 | 
            +
            #      buf << "\n"
         | 
| 15 | 
            +
            #      buf << "// Constructor\n"
         | 
| 16 | 
            +
            #      buf << "#{@ctor.decl}\n"
         | 
| 17 | 
            +
            #    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                if payable_functions.size > 0
         | 
| 20 | 
            +
                  buf << "\n"
         | 
| 21 | 
            +
                  buf << "// #{payable_functions.size} Payable Function(s)\n"
         | 
| 22 | 
            +
                  payable_functions.each do |func|
         | 
| 23 | 
            +
                    buf << "#{func.decl}\n"
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                if transact_functions.size > 0
         | 
| 28 | 
            +
                  buf << "\n"
         | 
| 29 | 
            +
                  buf << "// #{transact_functions.size} Transact Functions(s)\n"
         | 
| 30 | 
            +
                  transact_functions.each do |func|
         | 
| 31 | 
            +
                    buf << "#{func.decl}\n"
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                if query_functions.size > 0
         | 
| 36 | 
            +
                  buf << "\n"
         | 
| 37 | 
            +
                  buf << "// #{query_functions.size} Query Functions(s)\n"
         | 
| 38 | 
            +
                  query_functions.each do |func|
         | 
| 39 | 
            +
                    buf << "#{func.decl}\n"
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                if helper_functions.size > 0
         | 
| 44 | 
            +
                  buf << "\n"
         | 
| 45 | 
            +
                  buf << "// #{helper_functions.size} Helper Functions(s)\n\n"
         | 
| 46 | 
            +
                  helper_functions.each do |func|
         | 
| 47 | 
            +
                    buf << "#{func.decl}\n"
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                buf << "}\n"
         | 
| 52 | 
            +
                buf
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
             | 
| 56 | 
            +
            end  ## class Contract
         | 
| 57 | 
            +
            end  ## module ABI
         | 
    
        data/lib/abi2sol.rb
    ADDED
    
    | @@ -0,0 +1,81 @@ | |
| 1 | 
            +
            require 'abiparser'
         | 
| 2 | 
            +
            require 'optparse'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
             | 
| 6 | 
            +
            ##  our own code
         | 
| 7 | 
            +
            require_relative 'abi2sol/generate'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
             | 
| 10 | 
            +
             | 
| 11 | 
            +
            module Abi2Sol
         | 
| 12 | 
            +
            class Tool
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              def self.main( args=ARGV )
         | 
| 15 | 
            +
                puts "==> welcome to abi2parse tool with args:"
         | 
| 16 | 
            +
                pp args
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                options = {
         | 
| 19 | 
            +
                          }
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                parser = OptionParser.new do |opts|
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  opts.on("--name STRING",
         | 
| 24 | 
            +
                          "name of contract interface (default: nil)") do |str|
         | 
| 25 | 
            +
                      options[ :name]  = str
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  opts.on("-h", "--help", "Prints this help") do
         | 
| 29 | 
            +
                    puts opts
         | 
| 30 | 
            +
                    exit
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                parser.parse!( args )
         | 
| 35 | 
            +
                puts "options:"
         | 
| 36 | 
            +
                pp options
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                puts "args:"
         | 
| 39 | 
            +
                pp args
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                if args.size < 1
         | 
| 42 | 
            +
                  puts "!! ERROR - no contract found - use <contract>"
         | 
| 43 | 
            +
                  puts ""
         | 
| 44 | 
            +
                  exit
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                path = args[0]
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                do_generate( path, name: options[:name] )
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                puts "bye"
         | 
| 52 | 
            +
              end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
             | 
| 55 | 
            +
             | 
| 56 | 
            +
              def self.do_generate( path, name:  )
         | 
| 57 | 
            +
                abi = ABI.read( path )
         | 
| 58 | 
            +
                ## pp abi
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                puts "==> generate contract interface from abi in (#{path})..."
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                buf =  abi.generate_interface( name: name )
         | 
| 63 | 
            +
                puts buf
         | 
| 64 | 
            +
                ## write_text( "./tmp/punks_v1.sol", buf )
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
             | 
| 68 | 
            +
            end  # class Tool
         | 
| 69 | 
            +
            end   # module Abi2Sol
         | 
| 70 | 
            +
             | 
| 71 | 
            +
             | 
| 72 | 
            +
             | 
| 73 | 
            +
            ######
         | 
| 74 | 
            +
            #  add convience alternate spelling / names
         | 
| 75 | 
            +
            Abi2sol       = Abi2Sol
         | 
| 76 | 
            +
            Abi2solidity  = Abi2Sol
         | 
| 77 | 
            +
            Abi2Solidity  = Abi2Sol
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            AbiToSol      = Abi2Sol
         | 
| 80 | 
            +
            AbiToSolidity = Abi2Sol
         | 
| 81 | 
            +
             | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,105 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: abi2sol
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Gerald Bauer
         | 
| 8 | 
            +
            autorequire:
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2023-02-03 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: abiparser
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: rdoc
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '4.0'
         | 
| 34 | 
            +
                - - "<"
         | 
| 35 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 36 | 
            +
                    version: '7'
         | 
| 37 | 
            +
              type: :development
         | 
| 38 | 
            +
              prerelease: false
         | 
| 39 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 40 | 
            +
                requirements:
         | 
| 41 | 
            +
                - - ">="
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            +
                    version: '4.0'
         | 
| 44 | 
            +
                - - "<"
         | 
| 45 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 46 | 
            +
                    version: '7'
         | 
| 47 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 48 | 
            +
              name: hoe
         | 
| 49 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 50 | 
            +
                requirements:
         | 
| 51 | 
            +
                - - "~>"
         | 
| 52 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 53 | 
            +
                    version: '3.23'
         | 
| 54 | 
            +
              type: :development
         | 
| 55 | 
            +
              prerelease: false
         | 
| 56 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            +
                requirements:
         | 
| 58 | 
            +
                - - "~>"
         | 
| 59 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 60 | 
            +
                    version: '3.23'
         | 
| 61 | 
            +
            description: abi2sol gem - command-line tool for application binary interface (abi)
         | 
| 62 | 
            +
              to solidity (contract) source code generation for Ethereum & Co.
         | 
| 63 | 
            +
            email: wwwmake@googlegroups.com
         | 
| 64 | 
            +
            executables:
         | 
| 65 | 
            +
            - abi2sol
         | 
| 66 | 
            +
            extensions: []
         | 
| 67 | 
            +
            extra_rdoc_files:
         | 
| 68 | 
            +
            - CHANGELOG.md
         | 
| 69 | 
            +
            - Manifest.txt
         | 
| 70 | 
            +
            - README.md
         | 
| 71 | 
            +
            files:
         | 
| 72 | 
            +
            - CHANGELOG.md
         | 
| 73 | 
            +
            - Manifest.txt
         | 
| 74 | 
            +
            - README.md
         | 
| 75 | 
            +
            - Rakefile
         | 
| 76 | 
            +
            - bin/abi2sol
         | 
| 77 | 
            +
            - lib/abi2sol.rb
         | 
| 78 | 
            +
            - lib/abi2sol/generate.rb
         | 
| 79 | 
            +
            homepage: https://github.com/rubycocos/blockchain
         | 
| 80 | 
            +
            licenses:
         | 
| 81 | 
            +
            - Public Domain
         | 
| 82 | 
            +
            metadata: {}
         | 
| 83 | 
            +
            post_install_message:
         | 
| 84 | 
            +
            rdoc_options:
         | 
| 85 | 
            +
            - "--main"
         | 
| 86 | 
            +
            - README.md
         | 
| 87 | 
            +
            require_paths:
         | 
| 88 | 
            +
            - lib
         | 
| 89 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 90 | 
            +
              requirements:
         | 
| 91 | 
            +
              - - ">="
         | 
| 92 | 
            +
                - !ruby/object:Gem::Version
         | 
| 93 | 
            +
                  version: '2.3'
         | 
| 94 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 95 | 
            +
              requirements:
         | 
| 96 | 
            +
              - - ">="
         | 
| 97 | 
            +
                - !ruby/object:Gem::Version
         | 
| 98 | 
            +
                  version: '0'
         | 
| 99 | 
            +
            requirements: []
         | 
| 100 | 
            +
            rubygems_version: 3.3.7
         | 
| 101 | 
            +
            signing_key:
         | 
| 102 | 
            +
            specification_version: 4
         | 
| 103 | 
            +
            summary: abi2sol gem - command-line tool for application binary interface (abi) to
         | 
| 104 | 
            +
              solidity (contract) source code generation for Ethereum & Co.
         | 
| 105 | 
            +
            test_files: []
         |