Skip to content

teobouvard/freezenet

Repository files navigation

FreezeNet

FreezeNet is an attempt at making Proof of Work more computationally useful than it currently is. The idea is to replace Hashcash-like challenges with neural network training. This is not a fully-implemented alternative but only a proof of concept which was presented for a Data Mining project at the University of Stavanger. However, the results are encouraging so it seems worth sharing. Pull requests, questions and criticism are welcome.

For more information, you can read the paper explaining this project or take a look at the slides presenting it.

Simple API

You can apply a watermark to a model at any point.

model = FreezeNet()

some_signature = Signature(b'Some block information', 4096)
another_signature = Signature(b'Some other block information', 4096)

some_signature.sign(model)

some_signature.verify(model)    # True
another_signature.verify(model) # False

another_signature.sign(model)

some_signature.verify(model)    # False
another_signature.verify(model) # True

You can also train a model with a watermark.

model = FreezeNet()
some_signature = Signature(b'Some block information', 4096)
model.fit(x_train, y_train, **train_parameters, signature=some_signature)
some_signature.verify(model) # True

Learning ability

learning ability

Weak tampering resistance

weak tampering resistance

Strong tampering resistance

strong tampering resistance

Cite this work

@misc{freezenet20,
    author    = "Téo Bouvard",
    title     = "Freezenet: Making proof-of-work more useful",
    url       = "https://github.com/teobouvard/freezenet"
}

About

Making proof-of-work more useful ⛏️

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages