3D Printed "Safecoin" and "SAFE Safenetwork Coin"



Made these last night in OpenSCAD and printed them in PLA.

Random Community Artwork

This is awesome!!! I might as well share too :stuck_out_tongue: I’ve only showed this to one other community member so far, real rad guy :wink:

Might be selling these with the community logo at some point, on the network of course. As long as there are no objections. But damn @Infining these are cool. I want one for my keychain

Items for early adopters?


I notice you get the stringy problem with black PLA too. Lower the extruder temp a little and that helps.

What size are these?

and will you be sharing the openSACD files? (maybe http://www.thingiverse.com/)


Thanks for the tip on black PLA! I have uploaded the files here http://www.thingiverse.com/thing:2105873. The coins are 30 mm in diameter.


Hey @Nigel, I actually added the option in the models to add a hole in the coins for attaching to stuff. I haven’t printed one with a hole yet though so may need some adjusting. Awesome bottles by the way!


Likewise! I don’t have a 3D printer, yet. So maybe we could barter down the line. Keep up the creativity @Infining!


Very cool! Are they real? Like you twist off the top and it reveals an engraved MAID private key inside? Or just the design?

Very cool great job!


Super cool!

I want ALL the merch!

And I want to buy it with safecoin please lol. We’ll need to get divisibility sorted first at this rate though :wink:


@Infining what slicer are you using?

I am using “cura” and like in openSCAD it can open .png files and make a model from the 2D image into a 3D (dark colours are higher).

Anyhow I converted the .svg SAFEnetwork logo into a .png file and used the cura slicer to make a 3D model with 0mm base and max of 10mm. This allowed me to print bare logo.

Will add a photo when it finishes.


a SAFE thinkgyverse would be pretty cool as well. Keep designs forever and also allow upgrades. I have long wished to send 3d printers to remote places and email parts for equipment, even to use as models to then cast or similar. I love the idea of emailing parts like that. Some cases pla/nylon is enough but at the minimum an accurate model of a piece would be a lifesaver for far flung hard to reach places. A bit like what Cuba did, keep things running, but with some help from everyone else.


Here it is. Doesn’t look much (bad lighting) but gives you an idea.


I’ve been using Cura, didn’t know that it could do that. Awesome print!


Haha, I wish but no. Just printed the design.


that is SUCH a cool idea!!! you could stop the print - put a paper wallet inside and finish the print then xD


what surface are you printing on …? as little as that bottom layer seems to be squeezed i’m impressed it sticked to the ground and you were able to print that fine lines Oo
the print was made pretty fast wasn’t it (i mean short in time not with high-speed settings)…? as soon as shrinking sets in it should jump off the ground plate with those settings Oo …?


Yea just open any .png file and it gives you options. I set the base to 0.0mm

I went through the svg file to build a openSCAD program and scraped that idea as the svg file is a total mess using line segments and even the circles (line arcs actually) are different size (by a very small amount but still different.

Anyhow I reconstructed the svg file using circles and rectangle constructs and will today (hopefully) make a openSCAD module to build the logo on its own. Then you can build any structure around it.


Just make sure you don’t spend more making the “coins” than you do trading for them. I.e. make sure you don’t spend $5 making a $1 safecoin. It doesn’t matter if it’s made out of metal or plastic but the cost in materials has to be >= the cost in safecoin. Or you get the proverbial Canadian penny problem.

You know come to think of it 3D printed coins could help include people without internet in the safecoin economy. People without internet could carry and trade in the 3D printed coins and then trade them with someone who had internet. Those who had limited access to internet or only used internet at home would value such coins higher than having to constantly do electronic transactions but would still be able to reimburse individuals for the purchase of the coins.


Here is my attempt in openSCAD for a general module that just creates the logo giving it the size and thickness


Here is the code. Don’t tell anyone will ya :slight_smile:

// set circle perfection  (# segments)

//  Module for building an openframe SAFE network Logo
//  Parameters  
//      height - the Z axis or thickness of the 3D model
//      size   - This is the Y axis and is "height" of the 2D logo
//  The width (X axis) is determined by the logo design 
//  The logo follows a geometric pattern and distance between circles
//  The normalised distances make the logo height as 110.000mm
// Orientation  Y - vertical of 2D image
//              X - Horizontal of 2D image
//          0,0,0 - Bottom Left Hand corner of 2D image space
// width,height,0 - Top Right Hand corner of 2D image space
module SAFElogo(height=5.00, size=10.00) {
//  define the normalised distances 
    norm_y_height  = 110.000;
    norm_radius    =   7.000;
    norm_bar_width =   6.000;
    norm_bar_angle =  30.000;                    // +/- this value

    sRatio        = size / norm_y_height;      // normalised 110.000
    cRadius       = norm_radius * sRatio;        // normalised   7.000
    bWidth        = sRatio * norm_bar_width;     // normalised   6.000
    bAngle        = norm_bar_angle;              // normalised  30.000   +/-
    yGap          = ( size - 2*cRadius) / 4;     // normalised  24.000
    yHalfGap      = yGap / 2;                    // normalised  12.000
    xGap          = yHalfGap / tan(bAngle);      // normalised  20.78460969082652752232935609807
    bLength       = yHalfGap / sin(bAngle);      // normalised  24.000
    module doCircle(x=0, y=0, rad=1.0, zHeight=height) {
        translate([x,y,0]) cylinder(r=rad, h=zHeight, $fn=segs);
    module doBar(x=0, y=0, rot=0, zHeight=height) {
        translate([x, y, 0]) rotate([0, 0, rot])
        translate([0,-bWidth/2,0]) cube([bLength, bWidth, zHeight]);
    module doCircleBar(x=0, y=0, rad=1.0, rot=0, zHeight=height) {
        color("red") doCircle(x, y, rad, zHeight);
        if (rot!=0) { doBar(x, y, rot, zHeight); }
    echo(sRatio, cRadius, bWidth, bAngle, yGap, yHalfGap, xGap, bLength);
    doCircleBar(cRadius+0*xGap, cRadius+1*yGap,           cRadius,  30, height);
    doCircleBar(cRadius+0*xGap, cRadius+2*yGap,           cRadius,  90, height);
    doCircleBar(cRadius+0*xGap, cRadius+3*yGap,           cRadius, -30, height);
    doCircleBar(cRadius+1*xGap, cRadius+yHalfGap+0*yGap,  cRadius,  30, height);
    doCircleBar(cRadius+1*xGap, cRadius+yHalfGap+1*yGap,  cRadius,  90, height);
    doCircleBar(cRadius+1*xGap, cRadius+yHalfGap+2*yGap,  cRadius,  90, height);
    doBar      (cRadius+1*xGap, cRadius+yHalfGap+2*yGap,           -30, height);
    doCircleBar(cRadius+1*xGap, cRadius+yHalfGap+3*yGap,  cRadius,   0, height);
    doCircleBar(cRadius+2*xGap, cRadius+0*yGap,           cRadius,  90, height);
    doBar      (cRadius+2*xGap, cRadius+0*yGap,                     30, height);
    doCircleBar(cRadius+2*xGap, cRadius+1*yGap,           cRadius,  90, height);
    doBar      (cRadius+2*xGap, cRadius+1*yGap,                     30, height);
    doCircleBar(cRadius+2*xGap, cRadius+2*yGap,           cRadius,  30, height);
    doCircleBar(cRadius+2*xGap, cRadius+3*yGap,           cRadius,  90, height);
    doBar      (cRadius+2*xGap, cRadius+3*yGap,                    -30, height);
    doCircleBar(cRadius+2*xGap, cRadius+4*yGap,           cRadius,   0, height);
    doCircleBar(cRadius+3*xGap, cRadius+yHalfGap+0*yGap,  cRadius,   0, height);
    doCircleBar(cRadius+3*xGap, cRadius+yHalfGap+1*yGap,  cRadius, -30, height);
    doCircleBar(cRadius+3*xGap, cRadius+yHalfGap+2*yGap,  cRadius, -30, height);
    doBar      (cRadius+3*xGap, cRadius+yHalfGap+2*yGap,            30, height);
    doCircleBar(cRadius+3*xGap, cRadius+yHalfGap+3*yGap,  cRadius, -30, height);
    doCircleBar(cRadius+4*xGap, cRadius+1*yGap,           cRadius,   0, height);
    doCircleBar(cRadius+4*xGap, cRadius+2*yGap,           cRadius,   0, height);
    doCircleBar(cRadius+4*xGap, cRadius+3*yGap,           cRadius,   0, height);

SAFElogo(10, 110);


I have done a openSCAD version for myself of the SAFEcoin symbol

I copied the polygon point set from the svg file and imported that into a openscad program and made a module for it

module SAFEcoinSymbol(zHeight=10, size=100) {

//  these polygon sets are taken from the SAFEcoin svg file
    set1 = [ [7086.617,3633.422],  [4096.064,5360.018],  [4096.064,6571.439],  [4096.197,6571.516],
             [4096.113,6571.66],   [5527.561,7398.131],  [5527.561,7986.741],  [7086.615,8886.857],
             [8220.668,8232.114],  [5527.561,6677.242],  [5527.561,6677.554],  [4762.205,6235.663],
             [4762.205,5744.615],  [7086.617,4402.616],  [9411.023,5744.615],  [9411.023,6628.686],
             [10077.164,7013.283], [10077.164,5360.02] ];
    set2 = [ [10077.232,7602.532], [10077.164,7602.492], [10077.164,7602.18],  [9411.023,7217.582],
             [9411.023,7217.885],  [8645.67,6775.995],   [8645.67,6186.494],   [7086.617,5286.373],
             [5952.559,5941.121],  [7852.885,7038.276],  [7852.64,7038.7],     [9411.023,7938.46],
             [9411.023,8428.615],  [7086.613,9770.611],  [4762.205,8428.615],  [4762.205,7544.934],
             [4096.064,7160.338],  [4096.064,8813.213],  [7086.615,10539.807], [10077.164,8813.213],
             [10077.164,7602.65] ];

//  function to return the manimum value so that the model can be positioned better
    function max_set(set,axis=0,pos) = 
                    (pos>=len(set)) ? 0 : max(set[pos][axis], max_set(set,axis,pos+1));
//  function to return the minimum value so that the model can be positioned better
    function min_set(set,axis=0,pos) = 
                    (pos>=len(set)) ? 9999999999 : min(set[pos][axis], min_set(set,axis,pos+1));
//  get min vaules which is the amount to move the model
    min_x = min(min_set(set1,0,0), min_set(set2,0,0));
    min_y = min(min_set(set1,1,0), min_set(set2,1,0));

//  get the scaling factor  (need maximum side value)
    max_x   = max(max_set(set1,0,0), max_set(set2,0,0)) - min_x;
    max_y   = max(max_set(set1,1,0), max_set(set2,1,0)) - min_y;
    maxSize = max( max_x, max_y);
    scScale = size / maxSize;
    xSize   = max_x * scScale;
    ySize   = max_y * scScale;

//  actually build & scale the SAFEcoin_symbol model
//  have to rotate around the X axis dince the svg definitions are in mirror image compare to openSCAD
    rotate([180, 0, 0]) scale([scScale, scScale, 1]) 
        translate([-min_x, -min_y-max_y, -zHeight]) linear_extrude(height=zHeight) {