http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&feed=atom&action=history
Walnut/Persistent Secure Distributed Computing - Revision history
2024-03-19T13:22:20Z
Revision history for this page on the wiki
MediaWiki 1.15.5-7
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=1508&oldid=prev
Kevin Reid: /* Example: Persistent eChat */ add needs-review note
2008-03-12T22:40:01Z
<p><span class="autocomment">Example: Persistent eChat: </span> add needs-review note</p>
<p><b>New page</b></p><div>[[Category:Walnut|5]]<br />
<br />
==Persistent Secure Distributed Computing==<br />
<br />
There is a problem with the programs we explored in the last chapter. The MarketPlace server, the RaceTrack server, and eChat are not persistent: once you shut them down they are gone forever. You can start up a new server with the same code, but it will not return to life with the same [[wikipedia:Uniform Resource Identifier|URI]] it had before. As a consequence, if you restart a server, you must redistribute the [[capability]] to access that server to all the users. This is a logistical nightmare. When we restart one of these servers, it must be able to restart with the same [[VatID]] and object IDs it had before.<br />
<br />
If '''''E''''' simply allowed objects to remember their own URIs, there would be extensive opportunities for object forgery in the mobile code systems described in the next chapter. To prevent such forgeries, '''''E''''' uses ''[[swiss base]]s'' for persistence.<br />
<br />
===Swiss Bases===<br />
<br />
(XXX need to explain [[swiss number]]s within [[Walnut]], either here or earlier.)<br />
<br />
(XXX should Walnut link to general wiki pages, or only within itself?)<br />
<br />
To claim (to the [[comm system]]) that an object is that which should be referred to by an outside [[sturdyRef]], the swiss base for that sturdyRef must be presented. The '[[swiss base]]' is the number which hashes to the [[swiss number]] in the sturdyRef. Knowing the swiss base allows you to compute the swiss number, but knowing the swiss number does not allow you to compute the swiss base.<br />
<br />
Every holder of a sturdyRef knows its swiss number. Only the party which controls what the sturdyRef refers to knows its swiss base.<br />
<br />
If you use <code>[[timeMachine]]</code> to manage your persistent program, as the example below does, then <code>[[makeSturdyRef]]</code> manages the swiss bases for you.<br />
<br />
===Example: Persistent eChat===<br />
<br />
(XXX write explanatory text, and review this code w.r.t. what concepts Walnut has and hasn't introduced. Was copied from persist-echat.e-awt in the distribution.)<br />
<br />
<code filename="persist-echat.e-awt"><pre><br />
#!/usr/bin/env rune<br />
<br />
pragma.syntax("0.8")<br />
<br />
# Copyright 2002 Combex, Inc. under the terms of the MIT X license<br />
# found at http://www.opensource.org/licenses/mit-license.html ................<br />
<br />
/**<br />
* set up tracing; stub out all the printing for operational version<br />
*/<br />
def traceline(str) :void {<br />
stderr.println(str)<br />
}<br />
<br />
# Ensure the user knows if he's using a clear, unencrypted connection<br />
traceline(introducer.negotiable())<br />
<br />
#def Title := if (introducer negotiable() == ["3DES_SDH_M"]) {<br />
# "Secure EChat"<br />
#} else {<br />
# <swing:makeJOptionPane> showMessageDialog(<br />
# null,<br />
# "You are using DaffE, so you'll be chatting in the clear.<br />
#To be secure, use E instead.",<br />
# "Unencrypted DaffE Session",<br />
# <swing:makeJOptionPane> WARNING_MESSAGE())<br />
# "EChat"<br />
#}<br />
def Title := "eChat"<br />
<br />
<br />
/**<br />
* return the object represented by the URI<br />
*/<br />
def getObjectFromURI(uri) :any {<br />
introducer.sturdyFromURI(uri).getRcvr()<br />
}<br />
<br />
/**<br />
* return the friend file<br />
*/<br />
def findFriendFile(chatWin) :any {<br />
def dialog := <awt:makeFileDialog>(chatWin, "Select a Friend")<br />
dialog.show()<br />
var path := dialog.getFile()<br />
if (path != null) {<br />
path := dialog.getDirectory() + path<br />
}<br />
<file>[path]<br />
}<br />
<br />
/**<br />
* return a file to be saved<br />
*/<br />
def requestSaveFile(chatWin) :any {<br />
def dialog := <awt:makeFileDialog>(chatWin,<br />
"Save File with Your Name",<br />
<awt:makeFileDialog>.getSAVE())<br />
dialog.show()<br />
var addressName := dialog.getFile()<br />
if (addressName != null) {<br />
addressName := dialog.getDirectory() + addressName<br />
}<br />
<file>[addressName]<br />
}<br />
<br />
/**<br />
* method that writes out the URI for your echat system's communication<br />
* interface<br />
*/<br />
def offerMyAddress(file, uri) :void {<br />
traceline(`$file setText("$uri")`)<br />
file.setText(uri)<br />
}<br />
<br />
def set1LineComponentParameters(component) :void {<br />
component.setPreferredSize(<awt:makeDimension>(150,25))<br />
component.setMaximumSize(<awt:makeDimension>(1000,25))<br />
component.setAlignmentX(0.5)<br />
}<br />
<br />
def chatUIMaker(chatController) :any {<br />
# Lay out the chat window, create its components<br />
def chatWin := <swing:makeJFrame>(Title)<br />
def chatPane := chatWin.getContentPane()<br />
def border := <swing:makeBoxLayout>(chatPane,1)<br />
chatPane.setLayout(border)<br />
traceline("p1 ui made");<br />
def windowListener {<br />
to windowClosing(event) :void {<br />
chatController.leave()<br />
traceline("trying to exit")<br />
interp.continueAtTop()<br />
}<br />
match _ {}<br />
}<br />
chatWin.addWindowListener(windowListener)<br />
traceline("p2 ui made");<br />
<br />
/**<br />
* make a button that calls the chatController<br />
*/<br />
def newButton(labelText, verb) :any {<br />
# def button := <swing:makeJButton>(labelText)<br />
def button := <swing:makeJButton>(labelText)<br />
traceline("made button")<br />
set1LineComponentParameters(button)<br />
def buttonListener {<br />
to actionPerformed(event) :void {<br />
E.call(chatController, verb, [])<br />
}<br />
}<br />
button.addActionListener(buttonListener)<br />
traceline("button being returned")<br />
button<br />
}<br />
<br />
# setNameButton<br />
def setNameButton := newButton("Set Your Name", "setMyName")<br />
<br />
# offerChatButton<br />
def offerChatButton := newButton("Offer Chat", "offerSelf")<br />
offerChatButton.setEnabled(false)<br />
<br />
# findFriendButton<br />
def findFriendButton := newButton("Find Friend", "findFriend")<br />
findFriendButton.setEnabled(false)<br />
<br />
# chatScroller that holds chatTextArea<br />
def chatScroller := <swing:makeJScrollPane>()<br />
chatScroller.setMaximumSize(<awt:makeDimension>(2000,1000))<br />
chatScroller.setPreferredSize(<awt:makeDimension>(250,80))<br />
<br />
# chatTextArea<br />
def chatTextArea := <swing:makeJTextArea>()<br />
chatTextArea.setLineWrap(true)<br />
chatScroller.getViewport().add(chatTextArea)<br />
<br />
# nextMessageBox<br />
def nextMessageBox := <swing:makeJTextField>("Type your message here",30)<br />
set1LineComponentParameters(nextMessageBox)<br />
chatPane.add(nextMessageBox)<br />
traceline("p3 ui buildt");<br />
<br />
# sendMessageButton<br />
def sendMessageButton := newButton("Send", "send")<br />
sendMessageButton.setEnabled(false)<br />
<br />
chatPane.add(JPanel`$setNameButton<br />
$offerChatButton $findFriendButton<br />
$chatScroller.Y<br />
$nextMessageBox<br />
$sendMessageButton`)<br />
<br />
chatWin.pack()<br />
chatWin.show()<br />
<br />
def chatUI {<br />
to getChatWin() :any { chatWin }<br />
to getNameButton() :any { setNameButton }<br />
to getOfferChatButton() :any { offerChatButton }<br />
to getFindFriendButton() :any { findFriendButton }<br />
to getChatTextArea() :any { chatTextArea }<br />
to getNextMessageBox() :any { nextMessageBox }<br />
to getSendMessageButton() :any { sendMessageButton }<br />
}<br />
}<br />
<br />
/**<br />
* facet of chatController sent to other chatter with only appropriate<br />
* messages<br />
*/<br />
def chatReceiverMaker(var chatController) :any {<br />
def chatReceiver {<br />
to receive(message) :void { chatController.receive(message) }<br />
to receiveFriend(friend, name) :any {<br />
chatController.receiveFriend(friend, name)<br />
}<br />
to friendIsLeaving() :void { chatController.friendIsLeaving() }<br />
to revoke() :void { chatController := null }<br />
}<br />
}<br />
<br />
/**<br />
* @author Marc Stiegler<br />
*/<br />
def chatControllerMaker() :any {<br />
def chatController := {<br />
def chatUI := chatUIMaker(chatController)<br />
def myChatReceiver := chatReceiverMaker(chatController)<br />
var myName := null<br />
var myFriend := null<br />
var myFriendName := null<br />
var myAddressFile := null<br />
traceline("initialized chatController");<br />
def showMessage(senderName, message) :void {<br />
chatUI.getChatTextArea().append(<br />
senderName +" says:\t"+ message + "\n")<br />
}<br />
def showDebug(message) :void {<br />
# chatUI getChatTextArea() append("Debug: " + message + "\n")<br />
}<br />
def chatController {<br />
<br />
to getChatReceiver() :near { myChatReceiver }<br />
<br />
/**<br />
* transmitting functions<br />
*/<br />
to send() :void {<br />
def nextMsgBox := chatUI.getNextMessageBox()<br />
def nextMessage := nextMsgBox.getText()<br />
nextMsgBox.setText("")<br />
traceline("next message" + nextMessage)<br />
myFriend <- receive(nextMessage)<br />
showMessage(myName, nextMessage)<br />
}<br />
to setMyName() :void {<br />
myName := <swing:makeJOptionPane>.showInputDialog(<br />
"Please give me your name for this chat session")<br />
traceline(`name: $myName`)<br />
if (myName != null) {<br />
chatUI.getNameButton().setLabel(myName)<br />
chatUI.getNameButton().setEnabled(false)<br />
chatUI.getOfferChatButton().setEnabled(true)<br />
chatUI.getFindFriendButton().setEnabled(true)<br />
}<br />
}<br />
to offerSelf() :void {<br />
myAddressFile := requestSaveFile(chatUI.getChatWin())<br />
if (myAddressFile != null) {<br />
def sturdyChatReceiver := makeSturdyRef(myChatReceiver)<br />
if (timeMachine.isSaved()) {<br />
timeMachine.save()<br />
}<br />
def uri := introducer.sturdyToURI(sturdyChatReceiver)<br />
offerMyAddress(myAddressFile, uri)<br />
}<br />
}<br />
to leave() :void {<br />
if (myAddressFile != null) {<br />
# myAddressFile delete(null)<br />
}<br />
myFriend <- friendIsLeaving()<br />
chatController.disconnect("is being left")<br />
}<br />
to receive(message) :void {<br />
showMessage(myFriendName, message)<br />
}<br />
to receiveFriend(friend, name) :any {<br />
traceline("receiveFriend")<br />
myFriend := friend<br />
myFriendName := name<br />
chatUI.getSendMessageButton().setEnabled(true)<br />
chatUI.getOfferChatButton().setEnabled(false)<br />
chatUI.getFindFriendButton().setEnabled(false)<br />
chatUI.getChatTextArea().append(`$myFriendName has arrived$\n`)<br />
Ref.whenBroken(friend, def observer(prom) :void {<br />
chatController.disconnect("disconnected")<br />
})<br />
traceline("received")<br />
myName<br />
}<br />
to findFriend() :void {<br />
def file := findFriendFile(chatUI.getChatWin())<br />
if (file != null) {<br />
def friendURI := file.getText()<br />
showDebug("uri " + friendURI)<br />
def friend := getObjectFromURI(friendURI)<br />
showDebug("obj " + friend)<br />
<br />
when (friend <- receiveFriend(myChatReceiver, myName)) -><br />
done(friendName) :void {<br />
<br />
showDebug("won against all odds")<br />
chatController.receiveFriend(friend, friendName)<br />
} catch problem {<br />
showDebug("clobbered: " + problem)<br />
chatController.disconnect("is unreachable")<br />
}<br />
<br />
showDebug("sent me")<br />
}<br />
}<br />
to friendIsLeaving() :void {<br />
chatController.disconnect("is leaving")<br />
}<br />
to disconnect(desc) :void {<br />
chatUI.getSendMessageButton().setEnabled(false)<br />
if (myFriendName == null) {<br />
myFriendName := "the friend"<br />
}<br />
chatUI.getChatTextArea().append(<br />
myFriendName + " " + desc + "\n")<br />
myFriend := null<br />
myFriendName := null<br />
myChatReceiver.revoke()<br />
}<br />
}<br />
}<br />
}<br />
<br />
def controller := chatControllerMaker()<br />
def chatReceiver := controller.getChatReceiver()<br />
<br />
def makeAtomicFile := <import:org.erights.e.extern.persist.makeAtomicFile><br />
<br />
def makeVatFile(filename :String) :near {<br />
def file := <file>[filename]<br />
makeAtomicFile(<file>[file.getParent()], file.getName())<br />
}<br />
<br />
timeMachine.addExit(chatReceiver, "chatReceiver", true)<br />
<br />
if (interp.getArgs() =~ [`-save`, filename]) {<br />
traceline(`first incarnation as $filename`)<br />
<br />
timeMachine.new()<br />
def vatFile := makeVatFile(filename)<br />
timeMachine.createAs(vatFile)<br />
<br />
} else if (interp.getArgs() =~ [`-restore`, filename]) {<br />
traceline(`reincarnation from $filename`)<br />
<br />
def vatFile := makeVatFile(filename)<br />
timeMachine.revive(vatFile)<br />
<br />
} else {<br />
traceline("New unnamed incarnation")<br />
<br />
timeMachine.new()<br />
}<br />
<br />
introducer.onTheAir()<br />
traceline(introducer)<br />
traceline(`vatID: ${introducer.getVatID()}`)<br />
traceline(`netConfig: ${introducer.getNetConfig()}`)<br />
<br />
traceline(interp.getArgs())<br />
interp.blockAtTop()<br />
<br />
</pre></code><br />
<br />
Next Section: [[Walnut/Secure_Mobile_Code|Secure Mobile Code]]</div>
Kevin Reid
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2514&oldid=prev
Kevin Reid: /* Swiss Bases */ corrected definition of swiss base and expanded on it
2008-03-12T22:36:58Z
<p><span class="autocomment">Swiss Bases: </span> corrected definition of swiss base and expanded on it</p>
<table style="background-color: white; color:black;">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 22:36, 12 March 2008</td>
</tr>
<tr><td colspan="2" class="diff-lineno">Line 9:</td>
<td colspan="2" class="diff-lineno">Line 9:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Swiss Bases===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Swiss Bases===</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">An Swiss Base </del>is <del class="diffchange diffchange-inline">like </del>the <del class="diffchange diffchange-inline">mythical numbered Swiss bank account</del>.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">(XXX need to explain [[swiss number]]s within [[Walnut]], either here or earlier.)</ins></div></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">If </del>you <del class="diffchange diffchange-inline">know </del>the number you <del class="diffchange diffchange-inline">can get access</del>. </div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline">But in the instance </del>of <del class="diffchange diffchange-inline">Swiss Bases it is </del>the <del class="diffchange diffchange-inline">object but not an account </del>you <del class="diffchange diffchange-inline">gain access </del>to.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">(XXX should Walnut link to general wiki pages, or only within itself?)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">To claim (to the [[comm system]]) that an object </ins>is <ins class="diffchange diffchange-inline">that which should be referred to by an outside [[sturdyRef]], </ins>the <ins class="diffchange diffchange-inline">swiss base for that sturdyRef must be presented</ins>. <ins class="diffchange diffchange-inline">The '[[swiss base]]' is the number which hashes to the [[swiss number]] in the sturdyRef. Knowing the swiss base allows </ins>you <ins class="diffchange diffchange-inline">to compute </ins>the <ins class="diffchange diffchange-inline">swiss </ins>number<ins class="diffchange diffchange-inline">, but knowing the swiss number does not allow </ins>you <ins class="diffchange diffchange-inline">to compute the swiss base</ins>.</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">Every holder </ins>of <ins class="diffchange diffchange-inline">a sturdyRef knows its swiss number. Only </ins>the <ins class="diffchange diffchange-inline">party which controls what the sturdyRef refers to knows its swiss base.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> </div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins class="diffchange diffchange-inline">If </ins>you <ins class="diffchange diffchange-inline">use <code>[[timeMachine]]</code> </ins>to <ins class="diffchange diffchange-inline">manage your persistent program, as the example below does, then <code>[[makeSturdyRef]]</code> manages the swiss bases for you</ins>.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Example: Persistent eChat===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Example: Persistent eChat===</div></td></tr>
<!-- diff generator: internal 2024-03-19 13:22:20 -->
</table>
Kevin Reid
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2513&oldid=prev
Zarutian: /* Example: Persistent eChat */ saw that it should be persist-echat.e-awt instead of the former one
2008-03-05T17:45:30Z
<p><span class="autocomment">Example: Persistent eChat: </span> saw that it should be persist-echat.e-awt instead of the former one</p>
<table style="background-color: white; color:black;">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 17:45, 5 March 2008</td>
</tr>
<tr><td colspan="2" class="diff-lineno">Line 15:</td>
<td colspan="2" class="diff-lineno">Line 15:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Example: Persistent eChat===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Example: Persistent eChat===</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><code filename="echat.e-awt"><pre></div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><code filename="<ins class="diffchange diffchange-inline">persist-</ins>echat.e-awt"><pre></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>#!/usr/bin/env rune</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>#!/usr/bin/env rune</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 46:</td>
<td colspan="2" class="diff-lineno">Line 46:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>def Title := "eChat"</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>def Title := "eChat"</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">def chatReceiver</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">def sturdyChatReceiver</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">if (interp.getArgs() =~ [`-save`, filename]) {</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"> throw("use persist-echat.e-awt")</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">} else if (interp.getArgs() =~ [`-restore`, filename]) {</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"> throw("use persist-echat.e-awt")</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">} else {</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"> traceline("once only incarnation")</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"> introducer.onTheAir()</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"> def [bind sturdyChatReceiver, _, _] :=</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"> identityMgr.makeKnown(chatReceiver)</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">}</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">traceline(introducer)</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;">traceline(sturdyChatReceiver)</del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>/**</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>/**</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 204:</td>
<td colspan="2" class="diff-lineno">Line 189:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> */</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> */</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>def chatReceiverMaker(var chatController) :any {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>def chatReceiverMaker(var chatController) :any {</div></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div> <del class="diffchange diffchange-inline">bind </del>chatReceiver {</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> <ins class="diffchange diffchange-inline">def </ins>chatReceiver {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> to receive(message) :void { chatController.receive(message) }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> to receive(message) :void { chatController.receive(message) }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> to receiveFriend(friend, name) :any {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> to receiveFriend(friend, name) :any {</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 234:</td>
<td colspan="2" class="diff-lineno">Line 219:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> }</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> }</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> def chatController {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> def chatController {</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> to getChatReceiver() :near { myChatReceiver }</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> /**</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> /**</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 260:</td>
<td colspan="2" class="diff-lineno">Line 247:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> myAddressFile := requestSaveFile(chatUI.getChatWin())</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> myAddressFile := requestSaveFile(chatUI.getChatWin())</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> if (myAddressFile != null) {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> if (myAddressFile != null) {</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> def sturdyChatReceiver := makeSturdyRef(myChatReceiver)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> if (timeMachine.isSaved()) {</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> timeMachine.save()</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> }</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> def uri := introducer.sturdyToURI(sturdyChatReceiver)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> def uri := introducer.sturdyToURI(sturdyChatReceiver)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> offerMyAddress(myAddressFile, uri)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> offerMyAddress(myAddressFile, uri)</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 281:</td>
<td colspan="2" class="diff-lineno">Line 272:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> chatUI.getOfferChatButton().setEnabled(false)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> chatUI.getOfferChatButton().setEnabled(false)</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> chatUI.getFindFriendButton().setEnabled(false)</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> chatUI.getFindFriendButton().setEnabled(false)</div></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div> chatUI.getChatTextArea().append(</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div> chatUI.getChatTextArea().append(<ins class="diffchange diffchange-inline">`$</ins>myFriendName has arrived<ins class="diffchange diffchange-inline">$</ins>\n<ins class="diffchange diffchange-inline">`</ins>)</div></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del class="diffchange diffchange-inline"> </del>myFriendName <del class="diffchange diffchange-inline">+ " </del>has arrived\n<del class="diffchange diffchange-inline">"</del>)</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> Ref.whenBroken(friend, def observer(prom) :void {</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> Ref.whenBroken(friend, def observer(prom) :void {</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> chatController.disconnect("disconnected")</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div> chatController.disconnect("disconnected")</div></td></tr>
<tr><td colspan="2" class="diff-lineno">Line 329:</td>
<td colspan="2" class="diff-lineno">Line 319:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>def controller := chatControllerMaker()</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>def controller := chatControllerMaker()</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">def chatReceiver := controller.getChatReceiver()</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">def makeAtomicFile := <import:org.erights.e.extern.persist.makeAtomicFile></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">def makeVatFile(filename :String) :near {</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> def file := <file>[filename]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> makeAtomicFile(<file>[file.getParent()], file.getName())</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">}</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">timeMachine.addExit(chatReceiver, "chatReceiver", true)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">if (interp.getArgs() =~ [`-save`, filename]) {</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> traceline(`first incarnation as $filename`)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> timeMachine.new()</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> def vatFile := makeVatFile(filename)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> timeMachine.createAs(vatFile)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">} else if (interp.getArgs() =~ [`-restore`, filename]) {</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> traceline(`reincarnation from $filename`)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> def vatFile := makeVatFile(filename)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> timeMachine.revive(vatFile)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">} else {</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> traceline("New unnamed incarnation")</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"> timeMachine.new()</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">}</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">introducer.onTheAir()</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">traceline(introducer)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">traceline(`vatID: ${introducer.getVatID()}`)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">traceline(`netConfig: ${introducer.getNetConfig()}`)</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>traceline(interp.getArgs())</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>traceline(interp.getArgs())</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>interp.blockAtTop()</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>interp.blockAtTop()</div></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div></pre></code></div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div></pre></code></div></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div><del style="color: red; font-weight: bold; text-decoration: none;"></del></div></td><td colspan="2"> </td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Next Section: [[Walnut/Secure_Mobile_Code|Secure Mobile Code]]</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>Next Section: [[Walnut/Secure_Mobile_Code|Secure Mobile Code]]</div></td></tr>
<!-- diff generator: internal 2024-03-19 13:22:20 -->
</table>
Zarutian
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2512&oldid=prev
Zarutian: /* Swiss Bases */
2008-03-05T04:09:35Z
<p><span class="autocomment">Swiss Bases</span></p>
<table style="background-color: white; color:black;">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 04:09, 5 March 2008</td>
</tr>
<tr><td colspan="2" class="diff-lineno">Line 8:</td>
<td colspan="2" class="diff-lineno">Line 8:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Swiss Bases===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Swiss Bases===</div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">An Swiss Base is like the mythical numbered Swiss bank account.</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">If you know the number you can get access. </ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">But in the instance of Swiss Bases it is the object but not an account you gain access to.</ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Example: Persistent eChat===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Example: Persistent eChat===</div></td></tr>
<!-- diff generator: internal 2024-03-19 13:22:21 -->
</table>
Zarutian
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2511&oldid=prev
Zarutian: /* Example: Persistent eChat */ put in the code from echat.e-awt
2008-03-05T04:03:52Z
<p><span class="autocomment">Example: Persistent eChat: </span> put in the code from echat.e-awt</p>
<a href="http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2511&oldid=2510">Show changes</a>
Zarutian
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2510&oldid=prev
Zarutian: /* Persistent Secure Distributed Computing */ changed case of an internal link
2008-01-25T01:34:42Z
<p><span class="autocomment">Persistent Secure Distributed Computing: </span> changed case of an internal link</p>
<table style="background-color: white; color:black;">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 01:34, 25 January 2008</td>
</tr>
<tr><td colspan="2" class="diff-lineno">Line 3:</td>
<td colspan="2" class="diff-lineno">Line 3:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>There is a problem with the programs we explored in the last chapter. The MarketPlace server, the RaceTrack server, and eChat are not persistent: once you shut them down they are gone forever. You can start up a new server with the same code, but it will not return to life with the same [[wikipedia:Uniform Resource Identifier|URI]] it had before. As a consequence, if you restart a server, you must redistribute the [[capability]] to access that server to all the users. This is a logistical nightmare. When we restart one of these servers, it must be able to restart with the same [[<del class="diffchange diffchange-inline">vatID</del>]] and object IDs it had before.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>There is a problem with the programs we explored in the last chapter. The MarketPlace server, the RaceTrack server, and eChat are not persistent: once you shut them down they are gone forever. You can start up a new server with the same code, but it will not return to life with the same [[wikipedia:Uniform Resource Identifier|URI]] it had before. As a consequence, if you restart a server, you must redistribute the [[capability]] to access that server to all the users. This is a logistical nightmare. When we restart one of these servers, it must be able to restart with the same [[<ins class="diffchange diffchange-inline">VatID</ins>]] and object IDs it had before.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>If '''''E''''' simply allowed objects to remember their own URIs, there would be extensive opportunities for object forgery in the mobile code systems described in the next chapter. To prevent such forgeries, '''''E''''' uses ''[[swiss base]]s'' for persistence.</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>If '''''E''''' simply allowed objects to remember their own URIs, there would be extensive opportunities for object forgery in the mobile code systems described in the next chapter. To prevent such forgeries, '''''E''''' uses ''[[swiss base]]s'' for persistence.</div></td></tr>
<!-- diff generator: internal 2024-03-19 13:22:21 -->
</table>
Zarutian
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2509&oldid=prev
Ansible: /* Persistent Secure Distributed Computing */ some wikifying
2007-01-01T16:48:41Z
<p><span class="autocomment">Persistent Secure Distributed Computing: </span> some wikifying</p>
<table style="background-color: white; color:black;">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 16:48, 1 January 2007</td>
</tr>
<tr><td colspan="2" class="diff-lineno">Line 3:</td>
<td colspan="2" class="diff-lineno">Line 3:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>There is a problem with the programs we explored in the last chapter. The MarketPlace server, the RaceTrack server, and eChat are not persistent: once you shut them down they are gone forever. You can start up a new server with the same code, but it will not return to life with the same <del class="diffchange diffchange-inline">uri </del>it had before. As a consequence, if you restart a server, you must redistribute the capability to access that server to all the users. This is a logistical nightmare. When we restart one of these servers, it must be able to restart with the same vatID and object IDs it had before.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>There is a problem with the programs we explored in the last chapter. The MarketPlace server, the RaceTrack server, and eChat are not persistent: once you shut them down they are gone forever. You can start up a new server with the same code, but it will not return to life with the same <ins class="diffchange diffchange-inline">[[wikipedia:Uniform Resource Identifier|URI]] </ins>it had before. As a consequence, if you restart a server, you must redistribute the <ins class="diffchange diffchange-inline">[[</ins>capability<ins class="diffchange diffchange-inline">]] </ins>to access that server to all the users. This is a logistical nightmare. When we restart one of these servers, it must be able to restart with the same <ins class="diffchange diffchange-inline">[[</ins>vatID<ins class="diffchange diffchange-inline">]] </ins>and object IDs it had before.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>If <del class="diffchange diffchange-inline"><span class="e"></del>''E''<del class="diffchange diffchange-inline"></span> </del>simply allowed objects to remember their own <del class="diffchange diffchange-inline">uris</del>, there would be extensive opportunities for object forgery in the mobile code systems described in the next chapter. To prevent such forgeries, <del class="diffchange diffchange-inline"><span class="e"></del>''E''<del class="diffchange diffchange-inline"></span> </del>uses ''swiss <del class="diffchange diffchange-inline">bases</del>'' for persistence.</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>If <ins class="diffchange diffchange-inline">'''</ins>''E''<ins class="diffchange diffchange-inline">''' </ins>simply allowed objects to remember their own <ins class="diffchange diffchange-inline">URIs</ins>, there would be extensive opportunities for object forgery in the mobile code systems described in the next chapter. To prevent such forgeries, <ins class="diffchange diffchange-inline">'''</ins>''E''<ins class="diffchange diffchange-inline">''' </ins>uses ''<ins class="diffchange diffchange-inline">[[</ins>swiss <ins class="diffchange diffchange-inline">base]]s</ins>'' for persistence.</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Swiss Bases===</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>===Swiss Bases===</div></td></tr>
<!-- diff generator: internal 2024-03-19 13:22:21 -->
</table>
Ansible
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2508&oldid=prev
Mscheffler at 21:20, 27 November 2006
2006-11-27T21:20:13Z
<p></p>
<table style="background-color: white; color:black;">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 21:20, 27 November 2006</td>
</tr>
<tr><td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td></tr>
<tr><td class='diff-marker'>-</td><td style="background: #ffa; color:black; font-size: smaller;"><div>[[Category:Walnut]]</div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>[[Category:Walnut<ins class="diffchange diffchange-inline">|5</ins>]]</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td></tr>
<!-- diff generator: internal 2024-03-19 13:22:21 -->
</table>
Mscheffler
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2507&oldid=prev
Mscheffler at 20:48, 27 November 2006
2006-11-27T20:48:25Z
<p></p>
<table style="background-color: white; color:black;">
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">←Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 20:48, 27 November 2006</td>
</tr>
<tr><td colspan="2" class="diff-lineno">Line 1:</td>
<td colspan="2" class="diff-lineno">Line 1:</td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;">[[Category:Walnut]]</ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div><ins style="color: red; font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>==Persistent Secure Distributed Computing==</div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<!-- diff generator: internal 2024-03-19 13:22:21 -->
</table>
Mscheffler
http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2506&oldid=prev
Mscheffler at 18:03, 26 November 2006
2006-11-26T18:03:02Z
<p></p>
<a href="http://wiki.erights.org/mediawiki/index.php?title=Walnut/Persistent_Secure_Distributed_Computing&diff=2506&oldid=1508">Show changes</a>
Mscheffler