• Stars
    star
    639
  • Rank 70,436 (Top 2 %)
  • Language
  • Created over 8 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Mango: Git, completely decentralised.

Mango

Git, completely decentralised.

Using Ethereum and P2P content addressable networks (Swarm, IPFS, SSB) as a backend to Git.

This repository is also available on Mango at mango://{...}

NOTE: the protocol is subject to change. With subsequent changes your past repositories can became unaccessible.

Get started

Prerequisites:

  • an Ethereum node
  • an IPFS node
  • git and node.js environment

Install the helpers with: $ npm install -g mango-admin git-remote-mango

First you will need to create a repository on Ethereum. You can do this with: $ mango-admin create. This will use a simple contract with access control.

If you have a repository you want to upload:

  1. Add the new remote: $ git remote add mango mango://{repo address}

  2. Push to the new remote: $ git push mango master

If you know a repository you want to download: $ git clone mango://{repo address}

The repo address is the address of the repo contract - basically it is an Ethereum address. In the future, it could be a symbolic name retrieved via name systems, such as ENS.

You can use MangoRepo.sol as a repository contract. It is very basic and allows only the owner to publish Git updates.

If you have more than one Ethereum account in your local node, the desired address can be specified in the URL: mango://{ethereum account}@{repo address}

Use in test mode

The easiest way to try out Mango is using on a test network.

I suggest to try out testrpc, which is an Ethereum node simulator.

Additionally the data to IPFS will not be uploaded if an IPFS daemon is not installed and/or is not in synchronisation mode. Data will be stored and accessible locally only.

Example

Adding an existing repository:

$ git remote add mango mango://0x8add9d064bbd29f3118f11ee46abe0ad9e45aa59
$ git push mango master
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (17/17), 5.21 KiB | 0 bytes/s, done.
Total 17 (delta 7), reused 0 (delta 0)
To mango://0x8add9d064bbd29f3118f11ee46abe0ad9e45aa59
 * [new branch]      master -> master
$

Cloning:

$ git clone mango://0x8add9d064bbd29f3118f11ee46abe0ad9e45aa59
Cloning into '0x8add9d064bbd29f3118f11ee46abe0ad9e45aa59'...
12% =====================------------------------------------------------------------------------------------------------------------------------------------------------------------
18% ===============================--------------------------------------------------------------------------------------------------------------------------------------------------
24% ==========================================---------------------------------------------------------------------------------------------------------------------------------------
29% ====================================================-----------------------------------------------------------------------------------------------------------------------------
35% ==============================================================-------------------------------------------------------------------------------------------------------------------
41% =========================================================================--------------------------------------------------------------------------------------------------------
47% ===================================================================================----------------------------------------------------------------------------------------------
53% ==============================================================================================-----------------------------------------------------------------------------------
59% ========================================================================================================-------------------------------------------------------------------------
71% =============================================================================================================================----------------------------------------------------
76% =======================================================================================================================================------------------------------------------
88% ============================================================================================================================================================---------------------
94% =======================================================================================================================================================================----------
Receiving objects: 100% (17/17), 10.59 KiB | 0 bytes/s, done.
Checking connectivity... done.
$

Technical details

For the technical details see TECH.md.

Why is it called Mango?

I like using codenames when writing even proof of concepts. In any case it sounded nicer than ethergit.

The Ethereum ecosystem has a couple of white papers, two of them are:

  • the Yellow paper (EVM)
  • and the Orange paper (Swarm)

Considering that a mango can be yellow, orange, red or green based on its level of ripeness it fits in well :)

License

GPL v3

Copyright (C) 2016 Alex Beregszaszi

More Repositories

1

tinyoracle

Simple data provider toolkit for Ethereum
JavaScript
125
star
2

evm.elf

Assembly
76
star
3

yultsur

Yultsur is a Rust implementation of Yul.
Rust
56
star
4

ethereum-rsa

RSA signature verification in Ethereum
49
star
5

runevm

EVM interpreter compatible with the evm2wasm interface
Rust
42
star
6

weth3074

WETH3074 is a new version of the WETH contract which utilizes EIP-3074 to avoid the need for wrapping/unwrapping. In essence it turns ETH into an ERC-20 compatible token.
Solidity
39
star
7

shapeshiftbot

Simple Ethereum contract to transfer Ether to Bitcoin addresses via Shapeshift.io
38
star
8

ethereum-tokenescrow

A contract for running an escrow service for Ethereum token-contracts
29
star
9

density

Density is a library or collection of useful modifiers and methods for Solidity.
29
star
10

solc-rust

Rust bindings for the Solidity compiler.
Rust
27
star
11

mango-admin

CLI for Mango
JavaScript
22
star
12

tropicssl

Fork of the last BSD licensed release of PolarSSL / XySSL. This repository is an import from http://gitorious.org/tropicssl
C
21
star
13

eth2-deposit-contract

This is a port of the Vyper Eth 2.0 deposit contract to Solidity.
Solidity
18
star
14

puretea

Solidity
17
star
15

skyscanner

A Ruby wrapper for the Skyscanner API.
Ruby
17
star
16

bip32-path

Bitcoin BIP32 ('HD Wallet') path helpers.
JavaScript
15
star
17

rre2

RRE2 - Ruby RE2 binding
Ruby
14
star
18

blake2-solidity

This is a Solidity library aiming to implement BLAKE2 (using EIP-152).
Solidity
13
star
19

zkoisc

Implementing a Turing-complete computer (OISC) within a zk-SNARKS circuit.
12
star
20

git-remote-mango

Git remote helper for Mango
JavaScript
12
star
21

yevm

"Why EVM?" is an EVM compiler infrastructure.
11
star
22

mergeoracle

Solidity
10
star
23

dtiic

An Arduino project implementing an I2C-UART bridge compatible with Devantech's USB-ISS and USB-I2C.
Arduino
10
star
24

swarmgw

Simple Swarm interface to swarm-gateways.net (or other gateways)
JavaScript
10
star
25

compcard

Solidity
9
star
26

ethereum-bsm

Bitcoin Signed Message in Ethereum
JavaScript
7
star
27

rome2rio

A Ruby wrapper for the Rome2rio API.
Ruby
7
star
28

ruby-quota

Ruby-quota is a Ruby extension providing access to filesystem quota under Linux, FreeBSD, NetBSD, Dragonfly BSD, Solaris and Mac OS X.
C
7
star
29

ethereumjs-codesim

[OBSOLETE] A simple CLI app for running EVM simulations.
JavaScript
6
star
30

yamabi

Tool for translating YAML to Contract ABI and Solidity interfaces as per EIP-2069.
JavaScript
6
star
31

keccakjs

Keccak hash (SHA3) in Node.js and in the browser. Fast & simple.
JavaScript
6
star
32

rsnippets

Ruby (and other) Snippets
Ruby
5
star
33

solidity-rsa

5
star
34

web3-complete.js

This library tries to support all RPC methods not supported by by web3.js.
JavaScript
5
star
35

keccak-wasm

SHA-3 (Keccak padding) in WebAssembly WAST
4
star
36

swarmhash

Calculate the Swarm hash of data blobs.
JavaScript
4
star
37

offline-ipfs

JavaScript
4
star
38

scrypt.js

Scrypt in Node.js and in the browser. Fast & simple.
JavaScript
4
star
39

e3vm

EVM aka. "Embedded EVM-C-compatible Ethereum VM" (UNFINISHED)
C
3
star
40

lll-grammar

This is an attempt at specifying the grammar and semantics of LLL.
3
star
41

blockhash

Implementation of https://eips.ethereum.org/EIPS/eip-210 in Yul
3
star
42

daytona

Daytona is an EVMC compatible Ethereum VM kit.
Rust
3
star
43

sexpr-wasm-codegen

S-expressions to WebAssembly binary format converter
JavaScript
2
star
44

tb-dkim-headers

Thunderbird DKIM headers extension
JavaScript
2
star
45

julia-wasm-arithmetics

1
star
46

smartkard

Smartkard is a tiny Java library for easing the communication with ISO 7816 compatible smart cards.
1
star
47

console-web3

1
star
48

uleb128

LEB128 library designed for embedded devices.
C
1
star
49

eip1962-evmc

EIP-1962 implementation as an EVMC precompile module
Rust
1
star
50

arduino-xindajoy

This is a simple library for Arduino to support Joysticks.
C++
1
star
51

evm-bswap-golfing

Solidity
1
star
52

LuaReleases

Tracked Lua releases from version 1.0
C
1
star
53

afe

1
star
54

notes

JavaScript
1
star
55

lamed

1
star
56

soliditylang

HTML
1
star
57

safe-deployer

Solidity
1
star
58

standalone-parity-evm

This is Parity-Ethereum's EVM interpreter pulled out into a crate mapped to a stable upstream version
Rust
1
star
59

ewasm-assemblyscript-demo

JavaScript
1
star
60

etherboard

A contract inspired by Etherboard.io, combining a Ponzi-scheme with the MillionDollarHomepage.com
1
star
61

droidqr

Simple QRcode generator wrapper for Android
Java
1
star
62

trezor-react-pinpad

React component for displaying a pinpad for the Trezor hardware wallet.
JavaScript
1
star
63

evm-c-api

Deprecated. See: https://github.com/ethereum/evmc
1
star
64

ipaddr-buffer

A tiny shim over ipaddr.js providing convenience features for Node.js
JavaScript
1
star