Chronos: trusted timestamp on top of ethereum

mquandallemquandalle FranceMember Posts: 50 ✭✭
Hi,

I've released an ethereum smart contract + a client app for creating and verifying trusted timestamp on the ethereum blockchain. The service works in a similar way than BTProof [0] but using a generic/turing-complete blockchain makes it more efficient and cheaper for the user. Basically the idea is to calculate the `sha256sum` of a given file and then submit a transaction to the contract containing this hash. The contract goal is to associate the hash to the block timestamp, which is literally three lines of code [1].

With the latest C++ ethereum client (the `develop` branch) open http://ethereum-chronos.meteor.com in the embedded web browser. Then you can simply drag and drop a local file. If a *proof of existence* exists in the blockchain for this file, the application will show you the associated date. Otherwise, a single click button will allow you to create such proof. As the contract, the app is open source and available on github [2].

I have attached some screenshots of the application, feel free to share your thoughts!

[0] https://www.btproof.com/
[1] https://github.com/mquandalle/chronos/blob/master/contract.lisp
[2] https://github.com/mquandalle/chronos/tree/master/client
Post edited by System on

Comments

  • StephanTualStephanTual London, EnglandMember, Moderator Posts: 1,282 mod
    It's a working Ethereum app AND it works on meteor.js ... I must have gone to heaven!
  • mquandallemquandalle FranceMember Posts: 50 ✭✭
    Using the `deps` library [0] in the js binding would be amazing. It would allow functions like `eth.isMining()` or `eth.balanceAt(_a)` to be reactively updated.

    [0] https://github.com/meteor/meteor/blob/devel/packages/deps/deps.js
  • mode80mode80 Member Posts: 64 ✭✭
  • JasperJasper Eindhoven, the NetherlandsMember Posts: 514 ✭✭✭
    Cool, maybe other contracts want to know about if there is a timestamp/what it? Would be nice you could query checksums too, as a transaction. (no EXTRO for contracts anymore)

    For instance hypothetically there could be graph of how things are derived from each other exists. Basically you'd timestamp a document, and tell a list of things it claims it derives from. Then others come and judge that, or say 'no, he plagiarized this other timestamp' or just 'derives from this too'.(the tricky bit is how to incentivize correct assessments and scalability of ethereum) The idea being that a system gathering payment(for advertising)/donations would send coin downstream.

    Think that actually fits in one contract, but if that contract could talk to chronos, it could take over the timestamps. Perhaps there are other approaches too, for instance publication DAOs wishing to allow some guarranteed methods to report plagiarism.(feel those may be weaker though)
  • happyseaurchinhappyseaurchin Member Posts: 6
    Could this be used to track recommendations through a social network? We are developing an app (which could be built on Ethereum I am guessing at some point), and we'd like users to recommend it to others, and have a way of tracking who recommends to whom through time. We'd like to see influence.
  • JasperJasper Eindhoven, the NetherlandsMember Posts: 514 ✭✭✭
    edited May 2014
    @happyseaurchin It gives timestamps to documents with a particular checksum. If collisions have not been found, i.e. breaking the checksum, each checksum represents a single document. So you could use them to refer to the document. The answer is yes :)

    You may be interested in this thread of mine. I have not thought about 'linking', or what the effect should be at all yet!

    But as said i do worry about the scalability of ethereum if used for things that are really quite granular. Essentially everything you do is a transaction.. I expect that the ethereum network will cope by increasing the fees, possibly making the 'business model' of some contracts inpractical.

    Different approaches put different 'weight' on the system. For instance in the 'Publishing DAO' i suggest in the link probably weighs quite a bit less than the idea where you try illuminate who created what content. There are also tricks, like side chains, and probably more approaches that for instance use Merkle trees.
    Post edited by Jasper on
  • mquandallemquandalle FranceMember Posts: 50 ✭✭
    edited May 2014
    > Cool, maybe other contracts want to know about if there is a timestamp/what it? Would be nice you could query checksums too, as a transaction. (no EXTRO for contracts anymore) — @Jasper‌
    If I'm a full node and I want to read a stored value in a given contract, why would I create a ethereum transaction? I can just read my local database. So I think this is something to implement in the JavaScript API, not in the contract itself. Ðapps should be able to export and require some public API. For instance we could use ES6 modules [0]:
    import { pullHash, pushHash } from "chronos"
    $("form").submit(function(evt) {
    var fileHash = getFileHash(this);
    if (pullHash(fileHash))
    alert("This file already exists on the blockchain");
    });
    [0]: http://wiki.ecmascript.org/doku.php?id=harmony:modules
  • JasperJasper Eindhoven, the NetherlandsMember Posts: 514 ✭✭✭
    @mquandalle full nodes may be able to tell, but that may still limit what can be done trustlessly. There may be unforeseen uses to having other contract access it.

    Currently only have the quite possibly infeasible idea to try measure the extent works are derivative of each other, and couple it with sort-of automatic monetization, and feeding back the profits to creators. But i cant tell if that is the end of the uses. (hmm maybe should look at as if there is an oracle..)
  • mquandallemquandalle FranceMember Posts: 50 ✭✭
    edited May 2014
    > There may be unforeseen uses to having other contract access it. — @Jasper‌
    Yes I agree. Is there a consensus that contracts shouldn't be able to read other contracts storage directly and the only way to do that is to get back the `RETURN` value of a separate contract call?
  • JasperJasper Eindhoven, the NetherlandsMember Posts: 514 ✭✭✭
    @mquandalle: exactly, in the case of Chronos, that would probably be adding a command that returns whether an entry exists and what the timestamp is.
  • mquandallemquandalle FranceMember Posts: 50 ✭✭
    But I'm still not sure that a transaction is the good way to read a third party contract storage. I'm under the impression that a transaction role is to modify the contract state, not to read a value.
  • chris613chris613 Member Posts: 93 ✭✭
    @mquandalle‌ Maybe it would help to explain that when you do a CALL inside a contract a new transaction is not published onto the network. The miners running the VM simply execute the contract code that you're calling internally, and update the global state with respect to the ether transferred and gas consumed.

    Perhaps what you're longing for is a more clear distinction between read type operations vs. write type operations. This is probably something that is better left to the higher level languages, with CALL serving as the fundamental low level implementation. AFAIK this is not a feature inherent to Serpent, but you could certainly implement your own convention for your contracts.
  • JasperJasper Eindhoven, the NetherlandsMember Posts: 514 ✭✭✭
    @mquandalle‌ i have heard the developpers call the contracts closures. I think it may go as far as contracts existing solely as a function/object to be called!
  • fordlincolnfordlincoln VancouverMember Posts: 2
    this is really interesting and I see alot of use cases for this re: patents.
    are there any updates since May?
  • mquandallemquandalle FranceMember Posts: 50 ✭✭
    I tried to port this Ðapp to the latest release of mist. Unfortunatly it seems that drag-dropping a file is not possible anymore...


Sign In or Register to comment.